#! /usr/bin/perl # for Mac OS X (sjis) by Makoto Hiroshige 2003.01.04 # # 会員番号ファイル ID.db と支払記録ファイル paid_record.txtを照合し、 # 会員名から検索して会員番号を割り当てる。 # 会費納入額をチェックする。 # エラーがなければ整理済み結果を整形して checked_record.txt に出力する。 # 処理のログを check_log.txt に出力する。 # 会員番号ファイル ID.db の読み込み open( IDFILE, "ID.db" ) || die "Can't open file \"ID.db\".\n"; while() { chop; ($id,$name,$furigana,$kind) = split(/\t/); $name =~ s/ +//g; # delete 1byte space $name =~ s/(\x81\x40)+//g; # delete 2bytes space sjis # print "$name\n"; $furigana =~ s/ +//g; # delete 1byte space $furigana =~ s/(\x81\x40)+//g; # delete 2bytes space sjis # print "$furigana\n"; $idset{$name} = $id . "#" . $kind; } close(IDFILE); # 支払い記録ファイル paid_record.txt を1行ずつ処理する。 open( IN, "paid_record.txt" ) || die "Can't open file \"paid_record.txt\".\n"; $err_log = "会員名照合結果\t" . localtime(time) . "\n\n"; $err_flag = 0; while() { chop; next if /^#/; # skip Comment Line next if /^$/; # skip Empty Line ($method,$name,$paid,$date) = split; $name =~ s/ +//g; # delete 1byte space $name =~ s/(\x81\x40)+//g; # delete 2bytes space sjis $paid =~ s/,//g; # delete comma $id_kind = $idset{$name}; ($id, $kind) = split(/\#/,$id_kind); if( $kind ne "" ) { # 夫婦会員は $kind に会員番号がはいる $kaihi = 3000; } else { $kaihi = 2500; } if( $id eq "" ) { # 当該の名前の会員が存在しない $err_log .= "Error: $name not found.\n"; $err_flag = 1; } elsif( $paid % $kaihi ) { # 会費額で割り切れない if ( $paid % 2000 == 0 ) { # 2000 円と思われているらしきときは # 目をつぶって1年分として扱う (^^;) $paid_year = $paid / 2000; $result .= "$date $id $name $paid $paid_year $method $kind value2000\n"; } else { # それ以外の変な額の時はエラーとする。 $err_log .= "Error: $name paid value.\n"; $err_flag = 1; } } else { # 当該の名前の会員が存在して、かつ支払額が会費額で割り切れる。エライ! $paid_year = $paid / $kaihi; $result .= "$date $id $name $paid $paid_year $method $kind\n"; } } # エラーがない場合は整理済みファイル checked_record.txt に出力 if( !$err_flag ) { open( OUT, ">checked_record.txt" ) || die "Can't create result file \"checked_record.txt\"."; print OUT $result; close OUT; $err_log .= "全員正しく照合されました。checked_record.txt が生成されました。\n"; } # ログを check_log.txt に出力。これはエラーがあってもなくても出力される。 open( OUT, ">check_log.txt" ) || die "Can't create result file \"check_log.txt\"."; print OUT $err_log; close OUT;