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


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

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/07/11 18:11:23
  • 終了:2013/07/18 18:15:04

回答(2件)

id:sinrabanshyo No.1

sinrabanshyo回答回数139ベストアンサー獲得回数172013/07/12 08:57:26

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

ちがうかな。。

id:sakabeee

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

id:tobeoscontinue No.2

tobeoscontinue回答回数213ベストアンサー獲得回数532013/07/13 01:01:11

<?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を指定すると場合によっては実際の列数より小さくなることはあると思います。
あるいはデータの中にたまたま改行のコードが入っていたとか。
実際のコードがどうなっているか、あるいは改行のコードがどの部分に入っているかなどがはっきりすると原因が特定できると思います。

id:sakabeee

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

2013/07/16 19:38:30
  • id:yoneto164
    おそらく1アカウントに対して割り当てられているメモリの使用量を1行で超えてしまうためと思われます。
    現象が再現出来なかったので何とも言えないのですが、
    Zlib圧縮
    http://www.php.net/manual/ja/book.zlib.php
    などを使えば、ひょっとして。。。とも思います。

    もちろん、CSVファイルを数個に分けるか、1行のデータを数行に分けるか、MySQLなどのデータベースを使うのが良いと思います。
  • id:sakabeee
    回答ありがとうございます。
    1アカウントに割り当てられているメモリ、とは良いヒントをいただいてありがとうございます。
    別のサーバーで試してみたいと思います。

    一応、
    応急処置で複数に分かれた行を1行のデータに作り直して変数に入れて対応は出来ました。

    回答ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません