

編集機能を掲示板につけているところです。
テキストファイルの内容がまったく消えてしまうのです。
どうしてでしょうか?
データ形式
314:2006年2月20日(月)22時31分:あああ:いいい:ううう
313:2006年2月20日(月)22時31分:あああ:いいい:ううう
312:2006年2月18日(土)23時18分:あああ:いいい:ううう
#コード↓########################################
open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error.";
@all = <KEIJI>;
$num = $all[0] + 1 if( $num eq '' );
$title = &henkan($form{'title'});
$topic = $form{'topic'};
$message= $form{'message'};
#***** 文字列の置換 *****
$message =~ s/\r\n/<BR>/g;
# 日本語表記の日時を得るサブルーチン
$time = &jp_time if( $time eq '' );
# 重複があったら置き換えるルーチン
foreach(@all){
$data = $_;
chop $data;
( $fnum ) = ( split(/:/,$data) )[0];
if ( $fnum == $num ) {
$data = "$num:$time:$title:$topic:$message\r\n";
&jcode'convert(*data, 'sjis');
}
push @all, $data;
}
die "File 'keijiban.dat' Open Error.";
flock(KEIJI, 2);
foreach (@all){
print KEIJI $_,"\n";
}
flock(KEIJI, 8);
close(KEIJI);
~~~~~~~~~~~~~~~~~~~~~~~~
どんどん手をつけていったら書きこめなくなってしまいました。最初は書き込めていたんですけど・・・。
真ん中あたりのじ「重複があったらおきかえるルーチン」を付け加えていたら書き込めなくなりました。書き込めたときはpushではなくunshiftを使っていました。
No.1ベストアンサー
- 回答日時:
open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error.";
として、ファイルを開いた時点で中身が消えます。
open(KEIJI,"<keijiban.dat")
として開いて、データを読み込んだ後に処理をしましょう。
回答ありがとうございました。
そのへんを変えてみたところ内部エラーが出てしまいました。
これで書き込みモードとかのopen方法はあっていると思うのですが、どこがおかしいのかわかりません。
図ずうしいですが、もしわかったら教えてください。
open(KEIJI, "keijiban.dat") || die "File 'keijiban.dat' Open Error.";
# 過去のデータを全て配列に読み込む
@all = <KEIJI>;
# HTMLタグと衝突する記号などを変換
$num = $all[0] + 1 if( $num eq '' );
$title = &henkan($form{'title'});
$topic = $form{'topic'};
$message= $form{'message'};
#***** 文字列の置換 *****
$message =~ s/\r\n/<BR>/g;
# 日本語表記の日時を得るサブルーチン
$time = &jp_time if( $time eq '' );
# データを1行にまとめる(項目の区切りはコロン)
foreach(@all){
$data = $_;
chop $data;
( $fnum ) = ( split(/:/,$data) )[0];
if ( $fnum == $num ) {
$data = "$num:$time:$title:$topic:$message\r\n";
&jcode'convert(*data, 'sjis');
}
push @all, $data;
}
close(KEIJI);
open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error.";
flock(KEIJI, 2);
# (新規データ+過去データ)をファイルに上書き
print KEIJI @all;
flock(KEIJI, 8);
close(KEIJI);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
C#でのswitch文
-
テキストファイルの結合について
-
ファイルに書き込めない/ファ...
-
ポインター引数の関数でコンパ...
-
エクセルVBA:日付データの変換...
-
pythonでDBのカラム名で取得し...
-
int型(2バイト)データの分割
-
VisualBasicでレジストリキーの...
-
マクロ登録したピボットが重い...
-
Excel VBA グラフ作成のとき...
-
関数マクロの書き方
-
MySQLに登録すると文字化け
-
micropythonコード 修正
-
C言語の勉強しています。すみま...
-
パイソン、データーサイエンス...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
linuxのシェルでファイル名に先...
-
int型(2バイト)データの分割
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
【Excel VBA】10進数を2進数に...
-
ポインター引数の関数でコンパ...
-
'dataType' 引数を Null にする...
-
Excel VBA グラフ作成のとき...
-
テキストファイルの結合について
-
Cのプログラムがどうしても動き...
-
C言語でのLinuxとwindows共通の...
-
C言語の構造体にてバブルソート...
-
CreateProcessでの環境変数の設...
-
PINVOKEで構造体配列をマーシャ...
-
System.Collections.ArrayList ...
-
C言語 ファイル内のデータと入...
-
オセロゲーム 2次元配列で困...
-
RegQueryValueExでの2バイト文字
おすすめ情報