2017-01-12 3 views
1

私はデータベースから情報を取得し、それをテキストファイルに保存する必要があります。しかし、文書の最後の行に情報を格納すると空の行があります。この空の行を削除するにはどうしたらいいですか? 私のコードは次のとおりです。PHP - ファイル内の最後のPHP_EOL(空であるため)を削除するにはどうすればよいですか?

while ($info = mysqli_fetch_assoc($takeInfo)) { 
    $two = '2'; 
    $dateCreate = date("d.m.Y", strtotime($info['dateSystavqne'])); 
    $docNumber = $info['docNumber']; 
    $typeDoc = $info['typeDoc']; 
    //try to save the file! 
    $content = $two.'|'.$dateCreate.'|'.$docNumber.PHP_EOL; 
    file_put_contents('files/data.txt', $content, FILE_APPEND); 
} 

ファイルからの情報は次のとおりです。

  • 2 | 2017年3月1日| 0000016400
  • 2 | 2017年3月1日| 0000016401
  • 2 | 2017年3月1日| 0000016402
  • 2 | 2017年3月1日| 0000016403
  • 2 | 2017年3月1日| 0000016404
  • 2 | 03.01.2017 | 0000016405
  • //ここは空です 行!どうすれば削除できますか?
+0

出力する前に 'trim($ content)'を試したことがありますか?それはあまりにもthoの文字列からトリミングされます。 – jOpacic

答えて

2

あなたは、配列に行を収集し、それらを内破し、ファイルに結果を書き込むことができます。

$content = []; 
while ($info = mysqli_fetch_assoc($takeInfo)) { 
    // ... 
    $content[] = $two . '|' . $dateCreate . '|' . $docNumber; 
} 

$content = implode(PHP_EOL, $content); 
file_put_contents('files/data.txt', $content, FILE_APPEND); 

これは明らかに、より多くのメモリを消費しますが、I/O操作の数を減らすことができます。この解決策は、比較的小さな結果セットでは許容されます。多数の行に対しては、配列の内容をファイルに定期的にフラッシュする必要があります。最も簡単な方法の一つは、例えば、アイテムの数は、いくつかの制限値よりも大きくなったときに、ファイルに配列の内容をフラッシュすることです:

$fh = fopen('files/data.txt', 'a'); 

$content = []; 
for ($i = 1; $info = mysqli_fetch_assoc($takeInfo); $i++) { 
    // ... 
    $content[] = $two . '|' . $dateCreate . '|' . $docNumber; 

    if (count($content) >= 1e3) { 
    $content = implode(PHP_EOL, $content); 

    if ($takeInfo->num_rows > $i) 
     $content .= PHP_EOL; 

    fwrite($fh, $content); 
    $content = []; 
    } 
} 

if ($content) { 
    $content = implode(PHP_EOL, $content); 
    fwrite($fh, $content); 
    $content = null; 
} 

fclose($fh); 

注意、あなたは結果セットのレコード数を取得することができますmysqli_result::$num_rowsプロパティ。

+0

これは働いています - このコードは最後の空行を削除します!それでも行2 | 03.01.2017 | 0000016401を削除します!どうして? –

+0

@BorislavRazvanskiおそらく結果セットにそのような行がなかったためです。行を別のファイルに並行して書き込んだり、2つのファイルを 'diff file1 file2'コマンドで比較してみてください。違いが改行文字のみの場合、アルゴリズムは期待通りに機能します。 –

+0

コードは完璧に動作しています!ありがとうございました! –

関連する問題