※ ChatGPTを利用し、要約された質問です(原文:ヒットした行への上書き)
ヒットした行の上書き保存の方法
このQ&Aのポイント
今ブラウザゲームの編集している中で、a.cgiに複数行のデータが保存されていますが、特定の行だけを編集して上書き保存する方法を知りたいです。
具体的な作業としては、前ページで受け取ったIDというデータの行がa.cgiにある場合、その行を編集して上書き保存することです。
現在のプログラムでは、上記の作業を行うと、実行した際のデータのみが保存され、他のデータがすべて消えてしまいます。そのため、特定の行だけを編集して保存する方法を知りたいです。
お世話になります。
今ブラウザゲームの編集しているのですが、一箇所動作が上手く行かない箇所がありご質問させて頂きました。
行いたい作業としては「前ページで受け取ったID(in{'id'})というデータの行がa.cgiにあった場合、編集して上書き保存」という作業です。
open(IN,"./data/a.cgi");
@UNIT_DATA = <IN>;
$uid = $in{'id'} ;
close(IN);
foreach(@UNIT_DATA){
($uid,$lchara,$lname,$houshu,$comment,$nouryoku,$flg,$y_con,$times,$ninki)=split(/<>/);
}
##flgが2の場合は以前に戦闘経験あり
if($uid eq $mid && $flg eq 2){
$maxtotal=$mstr+$mvit+$mint+$mmen+$mdex+$magi;
$flg = 0;
$y_con = 0;
}else{
##雇用フラグ
$flg = 0;
##派遣先国
$y_con = 0;
##能力値の計算
$maxtotal=$mstr+$mvit+$mint+$mmen+$mdex+$magi;
##回数を0にセット
$times = 0;
##人気を0にセット
$ninki = 0;
}
@UNIT_DATA = ();
unshift(@UNIT_DATA2,"$mid<>$mchara<>$mname<>$in{'unit'}<>$in{'com'}<>$maxtotal<>$flg<>$y_con<>$times<>$ninki<>\n");
open(OUT,">./data/a.cgi") or &error('データを書き込むことができません。');
print OUT @UNIT_DATA;
print OUT @UNIT_DATA2;
close(OUT);
現在a.cgiには複数行別々のデータが入っているのですが、上記のプログラムを実行すると、実行した際のデータのみ保存され、他がすべて消えてしまいます。
これをその行だけ編集して上書きすることはできないでしょうか?
補足や分かりにくい点などあれば随時させて頂きますので何卒よろしくお願い申し上げます。