人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

csvが勝手に改行されて困っています。

現在PHPを使用し、サーバー上のCSVファイルにデータを保存するプログラムを作成しています。
1行のデータ量が多く、最大1800列(カンマの数)ほどありますが
830列ほどで自動的に改行され複数行のデータになってしまいます。
データが830列までの容量だと改行はされずに意図通り動いてくれます。

CSVはデータ量が多い場合は自動的に改行される使用なのでしょうか。
また、1行のデータ量の多いCSVを改行せずにファイルに保存するにはどうすればよいでしょうか。
ネットで検索しているのですが、
適当な答えがみつからずに悩んでいます。
何かアドバイスをいただけると非常に嬉しいです。



●質問者: yoshioka
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● sinrabanshyo

CSVファイルを開くエディターのせいではないのでしょうか。。
また、Windowsかlinuxなどかによってもテキストエディタの改行コードが違うようです。
linuxは改行がLF1バイト。
winはCR+LF
とかです。

ちがうかな。。


質問者から

すいません。。。 PHPで処理しているのでエディタのせいでは無いと思っています。
サーバーの設定なんですかね。。。


2 ● tobeoscontinue
<?php
$filename = "data.csv";
if (file_exists($filename)) {
 $f = file($filename);
 foreach ($f as $n=>$data) {
 $csv = str_getcsv($data);
 echo $n.' '.count($csv)."\n";
 }
// $h = fopen($filename, "r");
// while (!feof($h)) {
// $csv = fgetcsv($h);
// echo count($csv)."\n";
// }
// fclose($h);
} else {
 $h = fopen($filename, "w");
 foreach (range(1,100) as $n) {
 fputcsv($h, array_fill(0, 1800, str_repeat('banana',$n)));
 }
 fclose($h);
}
?>

100行1800列のテストデータを作成し読み込んでみましたが途中で改行されることはありませんでしたので仕様ということではないと思います。
fgetcsvではlengthを指定すると場合によっては実際の列数より小さくなることはあると思います。
あるいはデータの中にたまたま改行のコードが入っていたとか。
実際のコードがどうなっているか、あるいは改行のコードがどの部分に入っているかなどがはっきりすると原因が特定できると思います。


yoshiokaさんのコメント
連休を挟んでしまい、返答が遅れて失礼しました。 コードまで書いていただいてとても参考になりました。 実際のデータを見直してみたいと思います。 ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ