【发布时间】:2013-12-09 01:40:28
【问题描述】:
我有这两个文件,我想用数字比较它的内容。
文本1:
C_A C_A 0.0000 0.0000 0 0 50 47 100 390
C_A/I0/I0 INV 0.0200 0.2210 0 0 20 200 30 100
C_A/I0/I2 INV 1.0400 0.2210 0 0 530 200 250 261
文本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 30 100
C_A/I0/I2 INV 1.04 0.2210 0 0 530 200.00 250 261
期望的输出:
C_A/I0/I0 INV has mismatch property.
到目前为止我已经尝试过了,但我收到了use of uninitialized value 的错误。请给我建议。提前感谢您的帮助。
编辑代码:
use strict;
use warnings;
my %ref_data;
open my $fh, '<', 'Text1' or die $!;
while (<$fh>) {
chomp;
my ($occurname, $tempname, @data) = split;
$ref_data{$occurname} = \@data;
}
open $fh, '<', 'Text2' or die $!;
while (<$fh>) {
chomp;
my ($occurname, $tempname, @data1) = split;
my $data = $ref_data{$occurname};
print "$occurname $tempname has mismatch property\n" if
grep { $data1[$_] != $data->[$_] } 0 .. $#data1;
}
}
【问题讨论】:
-
!=是数字不等式运算符。你想要ne字符串。如果要进行数字比较,则需要将数字用作数字,而不是字符串。 -
嗨,是的,我需要做一个数字比较,你能建议如何将数字用作数字吗?我不确定如何。
-
不要将数据存储为字符串
"@data",将其存储为数组\@data。然后在循环中比较数组,例如if (grep { $array[$_] == $array1[$_] } 0 .. $array) -
我已根据您的建议更正了代码。但我仍然有上面更新的错误。
-
@woolstar 我认为
split已经这样做了。
标签: arrays perl comparison numerical