を引用符でカンマを削除する私は、CSVファイルを持って、私たちは、私はファイルを持っているエクセルは、例えば、二重引用符で囲むことにより、フィールドにカンマでそのことをし知っCSVは、正規表現
Product Name,Product Code
Product 1,AAA
"Prod,A,B",BBB
どのようにすることができますRegExpを使って引用符を "。"で置き換えます私は、出力
を引用符でカンマを削除する私は、CSVファイルを持って、私たちは、私はファイルを持っているエクセルは、例えば、二重引用符で囲むことにより、フィールドにカンマでそのことをし知っCSVは、正規表現
Product Name,Product Code
Product 1,AAA
"Prod,A,B",BBB
どのようにすることができますRegExpを使って引用符を "。"で置き換えます私は、出力
CSV処理関数(fgetcsv()
、fputcsv()
)は、このために非常に優れている - 彼らはエッジケースを処理すると、おそらくはるかに信頼性の高い、あなたが思い付くことができます任意の正規表現よりもなります。ディスクへの書き込み/からの読み取りを望んでいないについてコメント続き
// Open the file
$fp = fopen($pathToCsvFile, 'r+');
// Create an array of modified data
$tmp = array();
while (($row = fgetcsv($fp, 8192)) !== FALSE) {
foreach ($row as &$field) $field = str_replace(',', '.', $field);
$tmp[] = $row;
}
// Truncate the file and put the pointer at the beginning
ftruncate($fp, 0);
rewind($fp);
// Write the modified data back and close the file
foreach ($tmp as $row) {
fputcsv($fp, $row);
}
fclose($fp);
EDIT、あなたがこれを行うことができます:
// Lets say the raw CSV data is held in this variable as a string
$rawCsvData = 'Product Name,Product Code
Product 1,AAA
"Prod,A,B",BBB';
// Open a virtual file pointer to memory and fill it with your data
$fp = fopen('php://memory', 'w+');
fwrite($fp, $rawCsvData);
// Start from the beginning of the pointer
rewind($fp);
// ... INSERT CODE FROM ABOVE HERE (minus the fopen()/fclose())
$modifiedCsvData = stream_get_contents($fp);
fclose($fp);
として
Product Name,Product Code
Product 1,AAA
Prod.A.B,BBB
を得るように、代わりにだけ引用符これは、複数の置き換えを行うには、引用符を削除します。
<?php
$data = 'Product Name,Product Code
Product 1,AAA
"Prod,A,B",BBB';
$rgx = '/"(.+?)"/';
preg_match_all($rgx, $data, $matches);
$x = 0; $max = count($matches[0]);
while($x < $max){
$replace = str_replace(",", ".", $matches[1][$x]);
$data = str_replace($matches[0][$x], $replace, $data);
$x++;
}
echo $data;
?>
素晴らしい作品です!このページの何も動作しない場合、あなたのファイルが正しいエンコーディングを持っているかどうかを確認してください。 – Akshat
@Akshat Worksは素晴らしいです - 値にも二重引用符が含まれるまで。正規表現はエスケープを考慮していないので、その後、それは壊れます。これが、CSV処理機能がこれを行う方法である理由です。あなたが行うことができるようなものは、そうでないようなエッジケースを処理するものではありません。 – DaveRandom
をなぜあなたはこれを実行する必要がありますか? PHPのCSV処理関数は、オプションで引用符で囲まれたフィールドを扱うことができます。 –
これについて読んでください - > http://php.net/manual/en/function.preg-replace.php – Tudor
私はテキストBLOBフィールドに変換されたデータベースから私のCSVを直接読みましたが、ディスクに書きたくないです。 – Akshat