重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

二重に登録されないように既存ファイルを検索した後、ファイルに追記するプログラムを考えています。
次のプログラムを実行すると、二重登録されてしまいます。どうすれば、二重登録を防ぐ事ができるのでしょうか?

#!c:/perl/bin/perl
print "Content-type: text/html;\n\n";
require 'cgi-lib.pl';

&ReadParse(\%data);
$name = $data{'name'};
$age = $data{'age'};
$sei = $data{'sei'};
$input = $name.$age.$sei;

print "<HTML><HEAD>\n";
print "<TITLE>登録完了</TITLE>\n";
print "</HEAD><BODY>\n";

open(RF,"<mem.dat");
while($line=<RF>){
if($line eq $input){
print "既に登録されています。\n";
}
}
close(RF);

open(FP,">>mem.dat");
print FP $input;
print FP "\n";
close(FP);

print "<H3>登録完了しました。</H3>";
print "</BODY></HTML>\n";
exit;

実行すると、二重登録されていても、必ず「登録完了しました。」と表示されてしまいます。

A 回答 (1件)

ヒントです。


「一行は"改行"まで」です。
ということは
$line eq $input
で比較しても改行があるために「同じ」と判断されません。

あともうひとつ。
たとえ二重登録を検出しても、このままでは
「既に登録されています。」
を表示した後に
「登録完了しました。」
を表示し、結局は登録してしまうことになります。

二重登録を検出し、その旨をメッセージで出したらそこでスクリプトを終わらせるようにしましょう。
    • good
    • 0
この回答へのお礼

わかりました。ありがとうございます。

お礼日時:2004/11/01 01:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!