PHPでの読み取りに別の行終端を使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1215918

  •  06-07-2019
  •  | 
  •  

質問

LinuxでM $ Excelによって生成されたCSVファイルを読み取ろうとしています。

ファイルには、引用符で囲まれた複数行(x0Aで区切られた)列と0x0d0a行の終了があります。

Linux上のPHPは0x0aを行末記号として使用するため、すべての行ベースのツール(file、fgets、fgetcsv)は、データセルの中央にレコードブレークがあると考えています。

ファイルをバイト単位で処理する短いですが、PHPの行末文字(PHP_EOL定数)を一時的に変更して、ファイルを簡単に解析できるようにします。

Perlで" $ \"を使用して実行できると思います。 PHPに似たようなものがありますか?

バイト単位で解析できることはわかっていますが、よりクリーンなアプローチを探しています。

役に立ちましたか?

解決

conceptDawgの auto_detect_line_endings の提案が機能しない場合は、 file_get_contents ()を呼び出してから explode ()を使用して、ファイルを複数行に分割します。 explode()

に任意の文字を渡すことができます

他のヒント

auto_detect_line_endings 」ランタイム設定オプションを使用してみてください。これを使用すると、正しい行末が自動的に把握されるという。ドキュメントから:

  

オンにすると、PHPはfgets()およびfile()によって読み取られたデータを調べて、Unix、MS-Dos、またはMacintoshの行末規則を使用しているかどうかを確認します。

     

これにより、PHPはMacintoshシステムと相互運用できますが、最初の行のEOL規則を検出する際のパフォーマンスの低下が非常に小さく、Unixシステムで項目区切り文字としてキャリッジリターンを使用しているため、下位互換性のない動作が発生します。

それでもうまくいかない場合は、ファイル全体を常にメモリに読み込み(ファイルサイズによっては実行できない場合があります)、問題の文字に対してpreg_replaceを実行し、"正しい"に置き換えます。文字。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top