package CheckFile;
sub check{
use Check;
use Jcode;
use Tool;
use Error;
my($file, $form) = @_;
my(@error, %error);
my(%seen, @key);
open(FILE, $file) or Tool::error("$file: オープン不可");
while(<FILE>){
chomp; tr/\r\n//;
next if /^\s*#/; # コメント行
next if /^\s*$/; # 空行
# ルールの読み込み($keyが$valueでなければ、$msgを出力)
my($key, $value, $msg) = split;
my $keyname;
if($key =~ s/([^(]+)\(([^)]+)\)/$1/){
$keyname = $2;
}
# ルール1行分のチェック
my $error = Check::check_one($form, $key, $value);
if($error){
# エラーメッセージ生成
my $keyname = $keyname || $key;
$msg = "$keyname:=:$msg";
push(@key, $key) unless $seen{$key}++; # 現れた順番を保持
$error{$key} = $msg;
}
}
if(@error = @error{@key}){
Error::error([@error{@key}]);
}
1;
}
1;