У меня есть этот код, который сравнивает два примера текстовых файлов и сообщает о любом числовом несоответствии.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', а конечные четыре соответствуют «@ node»? – Borodin
да, вы правы. Переменные представляют собой содержимое @data. – annel