TSVファイルの読み込みにSplFileObjectを利用しているのですが、
作法としてsetFlags時にSplFileObject::READ_CSVを利用しているケースみますが、
1.タブ区切りのファイルにREAD_CSVをつける理由がわかりません。
タブ区切りをカンマ区切りとして変換しながら読み込みsetCsvControlで再度タブ区切りに変換しているのでしょうか?
2.SplFileObjectで取得したファイルの配列を取得する際1行ずつ読み込んでいると思うのですが、
読み込んだSplFileObjectオブジェクトを2回以上for文で繰り返し回した時、ポインタが最後まで行かないのはなぜでしょうか?
イメージ的に最後まで行ったらリセットや先頭に戻す処理が必要な気がしているのですがforeachを利用した場合不要なものでしょうか。
自己解決したので2は不要です。
$rows = new SplFileObject('target_file_path.tsv'); $rows->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE); $rows->setCsvControl("\t"); foreach ($rows as $row){ //参照し配列を作成する処理1 } foreach ($rows as $row){ //参照し配列を作成する処理2 }