CGI-BBS > 基礎 > 改行コード > ファイルへ追加する時の改行コード


カレッヂ
カレッヂ


データ復旧、即日 データ¨復旧¨テラステーション¨修理

質問者 capsule460  投稿日 1/15(火) 11:57:40
いつも大変お世話になっております。

今回もどうぞよろしくお願いいたします。
さて、今回困っているのは、ファイルの頭に新しいデータを追加していくとへんな
改行が追加されてしまうという現象なんです。

プログラムは、
unless( open(FILE, "+<$filename") ){
        &error("ファイルをopenできませんでした。");
        exit;
}
@data = <FILE>;
foreach $data(@data){
($w_filename,$kokaiflg)=split(/\t/,$data);
  if($kokaiflg == 1){
    $kokaiflg = 0;
  }
  if($w_filename eq $new_filename){
    $pastflg=1;
    $kokaiflg=1;
  }
  $w_data = "$w_filename\t$kokaiflg\n";
  @w_table = (@w_table,"$w_data");
  }
}
$new_data="$newdata1\t$newdata2\n";
unshift(@w_table,$new_data)
truncate(FILE,0);
seek(FILE,0,0);
print FILE @data;
close(FILE);
といった感じです。
まったくたいしたことをやっているわけではないのですが、
途中で過去のデータを回して、フラグのチェックなどをして、
@w_tableという配列に構築しなおしています。
このあたりが問題なのかなと思っているのですが、
新しいデータを追加し続けると、3つ目くらいで、
改行が最後に追加されてしまい、その以降も続けると
バンバン改行が追加され、セパレートの¥tまでなぜか単独で存在したりする
という現象が発生してしまいます。

なにかご教示いただければ幸いです。
どうぞよろしくお願いいたします。

回答者 しあわせのツボ  [削除]  投稿日 1/15(火) 14:00:38
読み込んだ$kokaiflgの末尾に\nが残っているのが原因でしょう。

($w_filename,$kokaiflg)=split(/\t/,$data);
の直後に
chop $kokaiflg;
を追加してみて下さい。
質問者 capsule460  [削除]  投稿日 1/15(火) 14:07:40
しあわせのツボ様
いつも本当にお世話になっております。

な、なるほどっ!!
っかー、もうはまりまくって思考停止状態でした。
僕なんて、まだまだですねぇ。

かなりすっきりしました。
本当にありがとうございました。

このページは終了したので返信(回答)は書きこめません

データ復旧、即日 データ¨復旧¨テラステーション¨修理 Web裏技