4 つの列と多くの行を持つファイルをハッシュにロードしようとしています。英数字データを含み、日付と一致する最初のフィールドで別のファイルと結合する必要があります。ここに私のデータのサンプルがあります:
file 1:
AOKX 495408, L, 04/02/13, SWCOMP
AOKX 495408, L, 04/20/13, SWCOMP
BLHX 102, L, 04/01/13, WILDCOM
CRDX 7067, L, 04/05/13, TYCO
WW 9030, L, 04/02/13, HALLI
file2:
AOKX 495408, L, 04/15/13, SWCOMP
BLHX 102, L, 04/03/13, WILDCOM
CRDX 7067, L, 04/20/13, TYCO
WW 9030, L, 04/30/13, HALLI
BLHX 102, L, 04/30/13, WILDCOM
output file needs to look like:
AOKX 495408 L 04/02/13 04/15/13 SWCOMP
BLHX 102 L 04/02/13 04/03/13 WILDCOM (more than 1 date exists 04/30/13)
これが私がこれまでに持っているものです-まったく機能しません-テストして $key にあるものを印刷したいとき、それは私に2番目のフィールドを与えています. これを2つ以上のフィールドで機能させることはできないようです。だから私はここで立ち往生しています。
my %hash;
open FILE1, "<", "out1.txt" or die "$!\n";
while ( <FILE1> ) {
chomp $_;
my ( $key, $le, $date, $company ) = split ',', $_;
$hash{$key} = $le, $date, $company;
push @{ $hash{$key} }, $_;
}
close FILE1;
フォーマットを [$le, $date, $company] に変更しました。どうもありがとうございました。私の次の問題は、2 つのファイルがハッシュに読み取られた後、データを結合する方法がわからないことです。最初のフィールド (車の番号) を両方のファイルの日付と一致させる必要があります。どちらのファイルにも日付の複数のリストがあります。日付が存在しない場合でも、書き出されます。複数の日付の場合、最も近い日付を互いに一致させる必要があります。(例: 2013 年 4 月 1 日 2013 年 4 月 5 日 2013 年 4 月 6 日 2013 年 4 月 30 日) これが理にかなっていることを願っています。
だからここに私がこれまでに持っているものがあります(各ステップを理解しようとする非常に基本的なものです)私はちょうど学んでいて、本当にこれを機能させる必要があるので、どんな助けも大歓迎です... thx
#!/usr/bin/perl
#
use strict;
use warnings;
my $cnt = 0;
open FILE1, "<", "out1.txt" or die "$!\n";
my %hash;
while ( <FILE1> ) {
chomp $_;
my ( $key, $le, $date, $company ) = split ',', $_;
$hash{$key} = [$le, $date, $company];
push @{ $hash{$key} }, $_;
$cnt++;
# print "$key $date\n";
}
print "total pcon records processed: $cnt\n"; #just to verify all records read
$cnt=0;
close FILE1;
open FILE2, "<", "out2.txt" or die "$!\n";
open OUTFILE, ">", "final.txt" or die "$!\n";
while (<FILE2>) {
my ( $rkey, $rle, $rdate, $rcompany ) = split ',', $_;
$hash{$rkey} = [$rle, $rdate, $rcompany];
push @{ $hash{$rkey} }, $_;
$cnt++;
# print OUTFILE "\n"; #to write out once figure out how to combine
}
print "total rcpl records processed: $cnt\n"; #just to verify all records read
close FILE2;
close OUTFILE;
次のような出力が必要です。
AOKX 495408 L 04/02/13 04/15/2013 SWCOMP
AOKX 495408 L 04/20/13 SWCOMP
BLHX 102 L 04/01/13 04/03/2013 WILDCOM
BLHX 102 L 04/30/2013 WILDCOM