CGI-BBS > CGI > Perl > Perlの設置でファイル入出力をするとデータがずれてしまう。


カレッヂ
カレッヂ


質問者 ぺあ  投稿日 2005/3/28(月) 21:21:16
1. dat.datからファイルを読み込む。
2. METHOD=POSTで配列の順番($No_data)を取得する。
3. $No_data番目の$IDと$NAMEを取得する。
4. METHOD=POSTで変更したいIDを取得する。
5.  $No_data番目の$IDと$NAMEをdat.datへ書き込む。

上記要領ですとIDは変更されるのですが、dat.datの内容が次のよう様にズレてしまいます。
基本的なミスだとは思うのですが、自分ではどうしても原因がつきとめられませんでした。
すみませんが、どなたか御指南のほどよろしくお願い致します。


実施前のdat.datの内容
1,a,
2,b,
3,c,
4,d,
5,e,


実施後のdat.datの内容
1,a,
 2,ビー,
 3,c,
 4,d,
 5,e,



###############################################################################

$data = './dat.dat';


if (!open(GRD,"$data")) { &error("File Not Open","$dataを開くことができません."); }
@grade_data = <GRD>;
close(GRD);

$No_data = $FORM{'No'};  #Noを取得 

$grade = $grade_data[$No_data];
&jcode'convert(*grade,'sjis');
($ID,$NAME,) = split(/\,/,$grade);

$ID = $FORM{'ID'}; #変更されたIDを取得


print "Content-type: text/html\n\n";
print <<"EOF";

$NAMEさん。変更されたIDは$IDです。

EOF

$grade_data[$No_data]=("$ID,$NAME,\n");

open(OUT, "> $data");
print(OUT "@grade_data");
close(OUT);

【習熟度】多少の設置経験

回答者 domo  [削除]  投稿日 2005/3/29(火) 09:16:45
open(OUT, "> $data");
print(OUT "@grade_data");
close(OUT);

"@grade_data" で展開するとスペース区切りでの出力となります。($" のデフォルト)

例えば
@aaa = ("AAA\n","BBB\n","CCC\n");
print "@aaa"; 
--
AAA
 BBB
 CCC

print(OUT @grade_data); としてください。

http://www.rfs.jp/sitebuilder/perl/02/04.html#配列を展開する

質問者 ぺあ  [削除]  投稿日 2005/3/29(火) 18:38:57
御指南たいへんありがとうございました。

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


Web裏技