【发布时间】:2017-04-01 07:17:46
【问题描述】:
我遇到了一些麻烦,想知道是否有人可以解决它。 我想做的是:
- 打开一堆包含 .txt 文件的数据
- 创建一个包含 @array[@filenames][@data] 的多维数组
- 查找哪些文件在数据方面相互重复
这里我将一个文件放入一个变量中,使用正则表达式获取我的数据并将其放入一个数组中:
while (my $row = <$fh>) {
unless ($. == 0) {
{
local $/; # enable slurp
@datalist = <$fh> =~ /\s*\d*\/\s*\d*\|\s*(.*?)\|.*?(?:.*?\|){4}\s*(\S*)\|(\S*).*\|/g; #extract article numbers # $1 = article number, $2 = quantity, $3 = unit
}
push(@arrayofarrays,[@datalist]);
push(@filenames,$file);
last;
}
}
$numr++;
}
open(my $feh,">","test.txt");
print {$feh} Dumper \@arrayofarrays;
Dumper 显示我的数据看起来不错(伪结果使其易于阅读和简短):
$VAR1 = [
[
'data type1',
'data type2',
'data type3',
'data type1',
'data type2',
'data type3',
...
],
[
'data type1',
'data type2',
'data type3',
...
],
...
];
所以我想知道是否有人知道一种简单的方法来检查数据集之间的重复项?我知道我可以使用
打印单个数据集我所尝试的可能会更好地了解我需要做什么:
my $i = 0;
my $j = 0;
while ( $i <= scalar @arrayofarrays) {
$j = 0;
while ( $j <= scalar @arrayofarrays) {
if (@{$arrayofarrays[$i]} eq @{$arrayofarrays[$j]}) {
print "\n'$filenames[$i]' is duplicate to '$filenames[$j]'.";
} $j++;
} $i++;
}
【问题讨论】:
-
也许您可以edit your question 向我们展示您期望的输出。您的示例代码相当混乱。您正在比较每个二级数组中的元素数量,而不是任何元素。您正在使用字符串比较 (
eq) 而不是数字比较 (==) 来比较这些数字。 -
如果您想检查哪些文件是相同的,那么请忘记将它们全部读入内存。只需使用
Digest::MD5为它们中的每一个创建一个校验和并比较结果。
标签: arrays perl multidimensional-array