• 締切済み

TSVデータを上書きしたい

はじめまして。 CGI初心者です。 データの上書きがしたいのですがなかなかうまくいかなくてこまっています。 以下のソースは追加書き込み処理には成功しています。 以下に何を施せば上書きがうまくいくのかアドバイスをお願いします。 $scheduleFile2 = qq($form{"mon"}.tsv); # 読み込み処理 open(LOG,"$scheduleDir/$scheduleFile2"); @logs = <LOG>; close(LOG); foreach $logs(@logs){ ($golfdate,$areada,$ken,$date2,$para)=split(/\t/,$logs); } # 読み込み処理 # 書き込み処理 unless(&serchFile($scheduleDir,$scheduleFile2)){ &makeFile("$scheduleDir/$scheduleFile2"); } @DATA = (); open(FH,"+<$scheduleDir/$scheduleFile2"); flock(FH,LOCK_EX); while(<FH>){ $_ =~ s/\r//g; $_ =~ s/\n//g; # 行の末を削除する chomp; push(@DATA,$_); } $data01 = $form{"code"}.$form{"date"}; $data2 = $form{"area"}; $data3 = $form{"prefecture"}; $data4 = $form{"date"}; $data5 = $form{"open_state"}."\n"; $data = qq($data01\t$data2\t$data3\t$data4\t$data5); print FH "$data"; flock(FH,8); close(FH);

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> use CGI::Carp qw(fatalsToBrowser); > とファイルに記したらコンパイルエラーを表示してくれるのですか? モジュール自体がインストールされていないなどで使えなかったら どうしようもありませんが、使える状態なら、httpサーバーのログに 吐かれるような情報が表示されるページを作ってくれます。 ただし攻撃の情報を与えることになりかねないので、デバッグが終わったら このモジュールの使用をとめるようにしたほうが良いです。 スクリプトの問題についてはPerlのところに移って質問しなおしているようなので 省略します。

  • ys10
  • ベストアンサー率33% (1/3)
回答No.3

質問の意図と違うかもしれませんが 追記の書き込みではなく上書きがしたいということでしょうか? それならばfopen時に追記の"+<"ではなく"+>"とすれば いいんじゃないですか。 実はPerlはあんまりあつかったことがないんですが...

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

わからないのはCGIではなくPerlではないですか? 単に「エラーになった」ではなく、どのようなメッセージが出されたかなど 詳しい状況を説明してください。 まあCGIで動かして500エラーになりましたというならhttpサーバーの ログを見てねとしか云えませんが、それならそれでサーバーで動かす 前に最低限構文エラーがないことのチェックはすべきですし、 レンタルサーバーなどでhttpサーバーのログが見られないのなら、 use CGI::Carp qw(fatalsToBrowser); を使ってエラーを分かりやすく捕捉できるようにする努力をしましょう。

maedai
質問者

補足

すいません。 perlでしたか・・。それすらもわかってなくて質問してました。 use CGI::Carp qw(fatalsToBrowser); とファイルに記したらコンパイルエラーを表示してくれるのですか?

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

perldoc によれば +< のモード指定はCのライブラリ関数fopen のフラグ "a+"に 相当するもののようなので、 > a+ 読み取りおよび追加(ファイルの最後に書すむ)のために開く。 > ファイルが存在していない場合には新たに作成する。 > ストリームはファイルの最後に位置される。 書き込みを行う前にファイルの先頭に seek してやる必要があるのでは?

参考URL:
http://perldoc.perl.org/functions/open.html,http://perldoc.perl.org/functions/seek.html
maedai
質問者

補足

seek FH,0,0; print FH "$data"; と修正したのですが、その場合はエラーになってしまいました。 すいません・・。 ほんとにあまりCGIわからない・・というか、今回初めていじるかんじで。 もう少し詳しくお願いします。

関連するQ&A

専門家に質問してみよう