【Perl】マッチングした場合にファイルを出力するプログラム

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;
    }
}

 

 

出力ファイル

マッチング処理を行い、分類して出力することができました。

ログファイルでは、マッチングする出力対象リストをログとして残すようにしました。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP