0

注文のメモを含む大きな TXT ファイルを処理する必要があります。
のように見えるノートもあれば、のようNote for an orderに見えるノートもあります"Note for an order""文字列の最初と最後にある場合は、それぞれの文字列から文字を削除する必要があります。

ファイルがかなり大きい (±10MB) ため、最速の方法は何ですか? あなたは私に何を勧めますか?

4

3 に答える 3

3

ファイルから取得した各行を確認してください。行ごとに読んでいると思います-または、チャンク(またはファイル全体)で読んでいる場合は、行ごとに処理しています。その場合、行を取得して a にポップすると、 trim ()$varを使用して次のようなことができます。

$var=trim($yourLineOrColumn, '"');

代わりに対処し$varます。

于 2012-08-12T13:15:52.707 に答える
2

一度に 1 行ずつ読み取り、 "を削除して、ファイルを保存できます。
一度に 1 行ずつ読み取ると、すべてのファイルを一度に読み込む場合と比較して、メモリの消費量が大幅に少なくなります。したがって、任意のサイズの.txtファイルを処理できます。 、コンピューターの速度によってのみ制限されます。

注: を使用していると仮定しますLocal Web Server。共有ホスティングでは、30 秒の最大実行時間制限をオーバーライドできない場合があります。このコードをローカル XAMPP サーバーで使用することをお勧めします。

<?php
set_time_limit(0); //To remove the max-execution time limit

$file_from = "foo.txt"; //File containing all the text
$file_to = "bar.txt"; //New File containing all the modified text

//open both files
$fp_source = fopen($file_from, "r") or die("Couldn't open ".$file_from);
$fp_dest = fopen($file_to, 'a+') or die("Couldn't open ".$file_to);

while (!feof($fp)) {          //Continue loading domains till the end of file
    $line = fgets($fp, 1024); //load one line at a time
    $line = trim($line, '"'); // remove the first & last "
    fwrite($file_to, $line);  // save text in new file.
}
fclose($file_from);           //close the handles
fclose($file_to);             //close the handles
?>

上記のコードは、文字列の最初と最後の位置にある"をすべて置き換えます。各文字列は改行文字で区別されます。

" が文字列の途中にある場合は、この行を置き換えることができます

$line = trim($line, '"'); // remove the first & last "

と:

$line = str_replace('"', "", $line); // remove all the "

質問に のタグを付けましたPHPが、ファイルが 1 つしかない場合、またはファイルが少ない場合は、Notepad++ などのデスクトップ テキスト エディターの検索と置換機能を使用することをお勧めします。

于 2012-08-12T14:13:46.847 に答える
1

あなたが言及したような大きなファイルを処理することは、集中的なプロセスになります-それを最適化できる多くの方法があるとは思いません..おそらく、ファイルをいくつかのチャンクに分割すると役立つかもしれません...

いずれにせよ、ファイルを反復処理し、各行でtrim()関数を使用するだけです。これは、改行による文字列の分割を扱う関連記事です - How to put string in array, split by new line?

通常(デフォルトでは)、trim()関数は文字列の先頭と末尾から空白文字を削除しますが、削除する任意の文字を指定できます...

トリム— 文字列の先頭と末尾から空白 (またはその他の文字) を取り除きます。

文字列の先頭と末尾から二重引用符を削除する簡単な例を次に示します。-

$str = '"Hello "Stack" Overflow"';
$strippedStr = trim($str,'"');
echo $strippedStr;

// OUTPUT -> Hello "Stack" Overflow 

周囲の引用符のみが削除され、単語は引用符で囲まれたままになっていることに注意してくださいstack

各行の文字を削除したら、implode() 関数を使用して行を再結合します。

于 2012-08-12T13:16:12.457 に答える