csvインポートする時、”¥n”(改行コード)が入っていると認識されてしまった件
csvをインポートする時、”¥n”(改行コード)が入っていると認識されてしまった。
めっちゃくちゃ普通な(?)コードで
どこが間違っているかしらんかったが・・
犯人は「SplFileObject」オブジェクトの
setFlagsというcsvファイルを読み込むフラグを
指定するやつでした・・・。
$file->setFlags(
\SplFileObject::READ_CSV |
\SplFileObject::SKIP_EMPTY |
\SplFileObject::READ_AHEAD |
\SplFileObject::DROP_NEW_LINE <-問題のやつ
);
ここで
SplFileObject::DROP_NEW_LINE
というのが設定されていると改行が入っていると
改行されてしまいそうだった。
DROP_NEW_LINE フラグを削除したら問題なくうまく
いけた!!
英語版マニュアルには
SplFileObject::DROP_NEW_LINE
Drop newlines at the end of a line.
と書いてあるので、そう思っている!
日本語版はなんか難しい説明だったT-T
テストコードは
public function csvReading():String
{
$f = WWW_ROOT . "222.csv";
$file = new \SplFileObject($f);
$file->setFlags(
\SplFileObject::READ_CSV |
\SplFileObject::SKIP_EMPTY |
\SplFileObject::READ_AHEAD
);
$list = "<table>";
while(!$file->eof()){
$line = $file->fgetcsv();
$list = $list . "<tr>";
foreach ($line as $a) {
$list = $list . "<td>" . $a . "</td>";
}
$list = $list . "</tr>";
}
$list = $list . "</table>";
return $list ?? "";
}
定義済み定数 ¶
SplFileObject::DROP_NEW_LINE
行末の改行を読み飛ばします。
SplFileObject::READ_AHEAD
先読み/巻き戻しで読み出します。
SplFileObject::SKIP_EMPTY
ファイルの空行を読み飛ばします。期待通りに動作させるには、READ_AHEAD フラグを有効にしないといけません。
SplFileObject::READ_CSV
CSV 列として行を読み込みます。