• ベストアンサー

csvファイルチェック

いつもここで勉強させていただいています。 初めてPHPプログラムを書くことになって本をみてここの サンプルをみながらやっていく途中でどうしてもうまくいかないので皆さんの知恵をお借りしたいと思います。 <HTML> <?php //行番号表示 $leng = 0; $file_name = "roba.csv"; //区切り記号 $kigou = ","; //指定項目数 $count_koumoku = 20; // 関数呼び出し $e = koumokuCheck($file_name,$kigou,$count_koumoku); print "--;>チェック終了"; function koumokuCheck($file_name,$kigou,$count_koumoku){ $file = fopen($file_name, "r"); while ($data = fgetcsv($file, 1000,$kigou)) { //項目数カウントする $num = count ($data); if( $num != $count_koumoku) { //項目数カウントする(指定項目数より小さい場合メッセージ表示) $leng++; print "-->$leng"."<--項目数が足りてません <br>\n"; } else { $leng++; } } flock($file,LOCK_UN); fclose($file); } ?> </HTML> 上記のようなチェック機能をつくりましたが結果は一つの循環で結果(N行目が項目数が足りない)を返してくれますがここを配列を利用して項目数が足りない行番号を覚えさせて最後に足りない行番号を列挙して一つの行にまとめて表示したい(例:1,3,6,7,9の項目が足りません)と思っていますがなかなかうまくいきません!みなさんのよいアドバイスをまっています。

質問者が選んだベストアンサー

  • ベストアンサー
  • aqucent
  • ベストアンサー率39% (78/200)
回答No.2

エラーメッセージを変数に格納しておいて、後でまとめて出力すればよいと思います。 function koumokuCheck($file_name,$kigou,$count_koumoku){ $file = fopen($file_name, "r"); flock($file, LOCK_SH); while ($data = fgetcsv($file, 1000,$kigou)) { //項目数カウントする $num = count ($data); if( $num != $count_koumoku) { //項目数カウントする(指定項目数より小さい場合メッセージ表示) $leng++; $error .= $leng.', '; } else { $leng++; } } flock($file, LOCK_UN); fclose($file); echo $error.' の項目が足りません'; // エラーメッセージ出力 } # flock($file,LOCK_UN); はロックの開放が目的なので、予めロックしておかなければ無意味ですよ。 # 一応、共有ロックとして入れておきました。 PHP: 代入演算子 - Manual http://jp2.php.net/manual/ja/language.operators.assignment.php PHP: flock - Manual http://jp2.php.net/manual/ja/function.flock.php

roba1234
質問者

お礼

すみません!挨拶がおそくなりました。 こんなに詳しくまで教えていただいて 大変助かります。本当にありがとうございます。 いい勉強になりました。(^^)>お礼をもうしあげます。

その他の回答 (1)

回答No.1

<?php $file_name = "roba.csv"; //区切り記号 $kigou = ","; //指定項目数 $count_koumoku = 20; // 関数呼び出し $e = koumokuCheck($file_name,$kigou,$count_koumoku); print "--;>チェック終了"; if ($err_leng != "") { print $err_leng . "の項目数が足りません。"; } function koumokuCheck($file_name,$kigou,$count_koumoku){ $leng = 1; $err_leng = ""; $file = fopen($file_name, "r"); while ($data = fgetcsv($file, 1000,$kigou)) { $num = count ($data); if( $num != $count_koumoku) { if ($err_leng != "") { $err_leng .= ","; } $err_leng .= $leng; } $leng++; } ?>

roba1234
質問者

お礼

なるほど!これも一つの方法ですね! 皆さん、さすが強いですね!いつなら 私もこんなにすらすらと書けるレベルに なれるかな(??);よい参考になりました。 ありがとうございます。 お礼をもうしあげます。

関連するQ&A