編集機能を掲示板につけているところです。
テキストファイルの内容がまったく消えてしまうのです。
どうしてでしょうか?
データ形式
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
エクセルVBA:日付データの変換...
-
ビットデータのチェック方法
-
linuxのシェルでファイル名に先...
-
FFTがうまくできない
-
char str[256]の256の意味は?
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
Excel VBA メール作成について ...
-
バイナリとBCDコード
-
ワイド文字のバイト数が取得で...
-
DataGridViewの特定列に入力さ...
-
「1TB」のHDDに日本語は何字入...
-
POSTメソッドの最大容量について
-
エクセルシート名の制限を変更...
-
PHPのCookieが有るか無いかで、...
-
デバイスコンテキストに書いた...
-
Line Inputにて改行があっても...
-
C言語でwin32apiを使ってnotepa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
ポインター引数の関数でコンパ...
-
printfの%eで指数部分の桁数を...
-
パイソン、データーサイエンス...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
int型(2バイト)データの分割
-
CreateProcessでの環境変数の設...
-
【Excel VBA】10進数を2進数に...
-
python 気象データの取得
-
テキストファイルの結合について
-
RegQueryValueExでの2バイト文字
-
linuxのシェルでファイル名に先...
-
'dataType' 引数を Null にする...
-
C言語についてです! 同じ年の...
-
オセロゲーム 2次元配列で困...
-
PINVOKEで構造体配列をマーシャ...
-
matlabのソースコードをpython...
-
C言語の勉強しています。すみま...
-
System.Collections.ArrayList ...
おすすめ情報