【发布时间】:2013-06-01 09:38:27
【问题描述】:
我有一个 .txt 文件列表和一个参考 .csv 文件。我的参考包含我的关键字,我想看看是否可以在我在 foreach 循环中经历的 .txt 文件名中找到特定的关键字。
#!/bin/perl
use strict;
use warnings;
my %keyword;
my @files = glob("*.txt");
my $i = 0;
foreach my $file (@files) {
my %data_hash;
open(INFILE, "$file") or die "Can't open file \n";
while (<INFILE>) {
my @data = split(/\t/, $_);
$data_hash{ $data[0] } = $data [0];
$keyword{$file} = $file;
}
close INFILE;
open(REFERENCE, "$ARGV[0]") or die "Can't open file \n";
while (<REFERENCE>) {
my @all = split(/\t/, $_);
if ($keyword{ "*$all[0]" }) { #$all[0] contains the keyword
print $data_hash{ $all[1] }; #print $data_hash when $all[1] eq $data[0]
}
}
close REFERENCE;
}
我的文件名看起来像Hello_there_keyword.txt。我知道我的 $data_hash 确实包含正确的值。当 $file 包含关键字时,我是否在 $data_hash{$file} 中寻找关键字?
【问题讨论】:
-
这段代码不能用
use strict编译,因为%data_hash是未声明的。此外,您还有一个语法错误,您忘记了$。您不应发布无法编译的代码。错误“奇数个元素..”来自语句{data[0]},其中{}表示匿名哈希,包含单个元素。 -
请显示您遇到问题的代码,以及数据文件的示例。您只查看每行的第一个字段;对吗?
-
@TLP 我的代码中确实存在“my”和“$”。
-
@Borodin,我正在寻找 $all[0] 和 $file 的任何行之间的匹配项。
-
@Renaud 这只是让您发布此代码变得更加奇怪。