• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlでのデータ処理について)

perlでのデータ処理について

このQ&Aのポイント
  • perlでのデータ処理について困っている方へのアドバイス
  • ファイルの読み込みと書き込みで問題が発生しているかもしれません
  • コードの一部を修正することで問題が解決する可能性があります

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

  • ベストアンサー
  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.2

正規表現なんか使わなくても $work=""; でいいです。 これを 使い始める前か、使い終わった後に置きます。while(<IN>)ループの中ならどこでもいいです。 具体的には、【1】~【4】のどこかですね。 ついでですが、@logs=(); には意味がありません。それと、 for ($i=0; $i<@all_data; $i++){ $work.="$all_data[$i],"; } chop $work; push(@new,$work); }else{ push(@new,$log); } } のところは、 push(@new,join(',',@all_data)); の1行でいいじゃないですか。そうすると $work は不要ですね。 open(IN,"$files2") || &error("$files1を開けません。"); while (<IN>) { ($no,$id,$mail,$type,$data)=split(/,/); &get_date; @logs=(); @new=(); 【1】 open(LOG,"$files1") || &error("$files1を開けません"); @logs = <LOG>; close(LOG); 【2】 foreach $log (@logs){ @all_data = split(/,/,$log); if ($all_data[0] eq $id){ $shori_date="$year\/$w_mon\/$w_mday"; $all_data[33]="($shori_date)($hour:$min)"; 【3】 for ($i=0; $i<@all_data; $i++){ $work.="$all_data[$i],"; } chop $work; push(@new,$work); }else{ push(@new,$log); } } open(ALL,"+< $files1") || &error("$files1に書き込めません"); flock(ALL,2); truncate(ALL,0); seek(ALL,0,0); print ALL @new; close(ALL); 【4】 } close(IN);

kaku-yasu
質問者

お礼

ありがとうございました。おかげで改善できました。 また、わからない事があったら、質問しますので その時は、よろしくお願いします。

その他の回答 (1)

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.1

上記の書き方だと、$files2 の 1行処理ごとに $work をカラにしないといけません。

kaku-yasu
質問者

補足

アドバイスありがとうございます。 $workをカラにする方法ですが、正規表現の置き換えでもいいのでしょうか? 例えば、$work=~ s/$work//g;で$workの中身をカラにしてもいいのでしょうか? $work=~ s/$work//g;このやり方でやってみたら、日付は入力されましたが、処理が一度しか行われず、 メールの配信が一行目を送って日付を入力したら、スクリプトが終了してしまいました。 どこの部分で、どのようにして$workをカラにすれば全ての送信ファイルを処理できますか? すみませんが教えて下さい。 よろしくお願いします。

関連するQ&A