スレッド表示 | フラット表示〕 全トピック 920 件中 284 番目 次≫ ≪前

CSVファイルの更新

created: 2006-02-02 21:07 | modified: 2006-02-03 10:10 | reply: 2

[2903] CSVファイルの更新

user: 江戸川 | created: 2006-02-02 21:07
突然ですが、CSVファイルを更新するスクリプトを作成中です。
IDから始まって、名前、住所、電話・・・と言ったものがCSVファイルになっています。

以下は、あるIDでログインしていると言う設定で、そのIDの行の名前欄($data[2])をフォームから送信された"name"に上書きするスクリプトです。

----前略----
$id = $_SESSION['ID'];
$name = mb_convert_encoding($_POST['name'],'SJIS','EUC-JP');

$fname = '../../list.csv';
$fname_bak ='../../list_bak.csv';
$file = @fopen($fname,"r") or exit('ファイルにアクセスできませんでした');
$file_bak = @fopen($fname_bak,"w")or exit('BAKファイルにアクセスできませんでした');

while (!feof($file)) {
$data = fgetcsv($file,1000);
if ($data[0] == $id){
$data[2] = $name;
$rowc = implode(",", $data);
fputs ($file_bak, $rowc . "\n");
}else{
$row = implode(",", $data); //*ここで警告
fputs ($file_bak, $row . "\n");
}
}
fclose($file_bak);
fclose($file);
?>

とりあえず、list.csvが元の住所録で、これを一行づつ読みながら、通常はそのままlist_bak.csvと言うファイルに書き出し、IDが一致した行ではnameを書き換えると言う目論見です。

結果を見ると、list_bak.csv自体は思い通りに書き換わっていますが、問題はこれを実行したときに、上の*印の行に対してデバッガが次のようなメッセージを出します。

Warning: implode() [function.implode]: Bad arguments. in・・・・・

これはなぜなのでしょうか?
reply: 2904 返信 編集 削除

[2904] implode(

user: ゆうじ | created: 2006-02-03 00:32
こんばんわ。

CSVファイルの中に、改行のみの
「空行」があるのではないでしょうか。

マニュアルの fgetcsv には、
「CSVファイルの空行はヌルフィールドを
 一つだけ含む配列として返され・・・」
とあるので、空行があると
$data = array(NULL) ってことになります。

implode(",", $data); が
これを解決できない引数と判断しWarningになってる思います。

更新しない行の処理をこんな具合に変えてみては。
} elseif ($data[0]!==NULL) {
$row = implode(",", $data); //*ここで警告
fputs($file_bak, $row . "\n");
}
Parent: 2903  reply: 2906 返信 編集 削除

[2906] なるほど!「空行」

user: 江戸川 | created: 2006-02-03 10:10
ありがとうございます。解決しました。

CSVファイルをNotepadやExcelで開いても空行があるのか無いのかイマイチ判りませんでしたが、おっしゃるとおり
elseif($data[0]!==NULL)
でやると警告は出なくなりました。

何かの拍子に空行が沢山出来ていたのかも知れません。これからはこの方法で行きます。
Parent: 2904  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 284 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑