0
我有這個代碼比較兩個示例文本文件並報告任何數字不匹配。2文本文件比較和識別不匹配的類型
文本1:
C_A C_A 0.0000 0.0000 0 0 50 47 100 390
C_A/I0/I2 INV 1.0400 0.2210 0 0 530 200 250 261
C_A/I0/I0 INV 0.0200 0.2210 0 0 20 200 30 100
文本2:
C_A C_A 0.0000 0 0 0 50 47 100 390
C_A/I0/I0 INV 0.0200 0.2213 0 0 20 200 40 100
C_A/I0/I2 INV 1.00 0.2210 1 1 535 200.00 250 261
代碼:
use strict;
use warnings;
my %ref_data;
open my $fh, '<', 'Text1' or die "Could not open to read: $!";
while (<$fh>) {
chomp;
my ($occurname, $tempname, @data1) = split;
$ref_data{$occurname} = \@data1;
}
open $fh, '<', 'Text2' or die "Could not open to read: $!";
while (<$fh>) {
my ($occurname, $tempname, @data2) = split;
my $data1 = $ref_data{$occurname};
for (0 .. $#data2) {
if ($data1->[$_] != $data2[$_]) {
print "$occurname $tempname has mismatch property\n";
last;
}
}
}
輸出:
C_A/I0/I0 INV has mismatch property
C_A/I0/I2 INV has mismatch property
我想增加我的代碼,其中@data的內容在下面的順序($x_os $y_os $reflection $rotation @nodes)
與錯誤消息一起輸出以方便用戶進行調試。
所需的輸出:
C_A/I0/I0 INV has mismatch property (y_os,nodes)
C_A/I0/I2 INV has mismatch property (x_os,reflection,rotation,nodes)
變量'$ x_os','$ y_os','$ reflection','$ rotation'和'@ nodes'不會出現在你的代碼,而且沒有證據表明你的意思是什麼。雖然我可以猜出你的意圖,但如果你自己解釋它會容易得多。 '@ data'數組包含八個數字。你是說前四個是'$ x_os','$ y_os','$ reflection'和'$ rotation',最後四個是「@ nodes」嗎? – Borodin
是的,你是對的。這些變量表示@data的內容。 – annel