Perlでマッチングした場合とそうでない場合に分類するプログラム
サンプルプログラム
ファイルを読み込んで、キーとなる番号で分類し、それぞれのファイルに出力したい場合のプログラムです。
📝サンプルプログラム名:「MACHI1ON1.pl」
use strict;
use warnings;
use utf8;
binmode STDIN, ‘:encoding(cp932)’;
binmode STDOUT, ‘:encoding(cp932)’;
binmode STDERR, ‘:encoding(cp932)’;
#入力ファイル()
my $入力FILE1 = “IN1.txt”;
my $入力FILE2 = “IN2.txt”;
#出力ファイル(マッチファイル)
my $出力FILE1 = “OUT_MACHI.txt”;
#出力ファイル(アンマッチファイル)
my $出力FILE2 = “OUT_ANMACHI.txt”;
#出力ファイル(ログ)
my $出力FILE3 = “LOG.txt”;
#入力ファイルをオープンする
open(入力FILE1, “<$入力FILE1”) or die(“error :$!”);
open(入力FILE2, “<$入力FILE2”) or die(“error :$!”);
#出力ファイルをオープンする
open(出力FILE1, “>$出力FILE1”) or die(“error :$!”);
open(出力FILE2, “>$出力FILE2”) or die(“error :$!”);
open(出力FILE3, “>$出力FILE3”) or die(“error :$!”);
#カラのLISTを作成
my @list = ();
#ファイルを1行ずつ読み込み、キー値をリストに追加
while (my $line1 = <入力FILE2>){
my $Key = substr($line1, 0, 6);
push(@list, “$Key” );
}
#出力対象リストをログに出力
print 出力FILE3 “@list”;
#ファイルを1行ずつ読み込む
while (my $line = <入力FILE1>){
#読み込んだデータでキーとなる項目を取得
my $Key2 = substr($line, 0, 6);
#キー値で検索し、リストに含まれる場合マッチファイルに出力
if (grep {$_ eq $Key2} @list){
print 出力FILE1 $line;
#リストに含まれない場合、アンマッチファイルに出力
} else {
print 出力FILE2 $line;
}
}
#入力ファイルをクローズします
close(入力FILE1);
close(入力FILE2);
#出力ファイルをクローズします
close(出力FILE1);
close(出力FILE2);
close(出力FILE3);
print “ファイルの出力が完了しました”;
C:\perl>perl MACHI1ON1.pl
ファイルの出力が完了しました
C:\perl>
入力ファイルについて
入力ファイルは次のようなファイルを想定しています。
📝[IN1.txt」
0001 | 一郎 | 19 | c |
0002 | 次郎 | 18 | c |
0003 | 三郎 | 17 | c |
0004 | 一子 | 16 | c |
0005 | 二子 | 15 | c |
0006 | 三子 | 14 | c |
0007 | 四郎 | 13 | c |
📝[IN2.txt」
・IN2.txtのキー値を取得して「0001、0002、0006、0007」を取得しリスト化する
以下でリストを作成する
my @list = ();
#ファイルを1行ずつ読み込み、キー値をリストに追加
while (my $line1 = <入力FILE2>){
my $Key = substr($line1, 0, 6);
push(@list, “$Key” );
}
・ファイルを1行ずつ読み込み、キー値を取得し、リスト「0001、0002、0006、0007」に含まれているかどうか判定する。リストに含まれている場合、マッチファイルに出力し、そうでない場合はアンマッチファイルに出力する
#ファイルを1行ずつ読み込む
while (my $line = <入力FILE1>){
#読み込んだデータでキーとなる項目を取得
my $Key2 = substr($line, 0, 6);
#キー値で検索し、リストに含まれる場合マッチファイルに出力
if (grep {$_ eq $Key2} @list){
print 出力FILE1 $line;
#リストに含まれない場合、アンマッチファイルに出力
} else {
print 出力FILE2 $line;
}
}
出力ファイル
マッチング処理を行い、分類して出力することができました。
ログファイルでは、マッチングする出力対象リストをログとして残すようにしました。
コメントを残す