【发布时间】:2017-02-27 03:30:07
【问题描述】:
我需要一些关于 Perl 的帮助。
我在一个文件中有一个 ID 和相应值的列表。每个 ID 都充当哈希散列中的一个键,因此每个键都有多个值。我正在尝试打开第二个文件并在每次遇到密钥时分配一个不同的值。这是我目前所拥有的:
此代码获取输入文件并构建哈希值。 $prot 是键,$dir 是值。每个键都有多个值。
open (IN, "file_name");
while (<IN>)
{
($prot, $dir) = split;
push (@{$dir{$prot}}, $dir );
}
在代码的第二部分,我想读取文件的每一行并使用该行中的第一列作为键来分配不同的值。每个键将在第二个文件中出现多次,并且对于每个实例,我希望它打印不同的值。
open (FH, "results_file");
while (<FH>)
{
chomp;
@a=split;
$prot=$a[1];
foreach (values %dir)
{print "$a[1]"."\t"."@{$dir{$prot}}"."\n";}
}
现在代码的编写方式是在遇到键时打印每个键的所有值。
非常感谢您提供的任何帮助!
编辑:
第一个输入文件类似于
BC_123456 dir_6789
BC_456789 dir_3456
BC_234689 dir_1298
BC_123456 dir_3987
BC_876432 dir_7642
【问题讨论】:
-
您能提供输入文件的样本吗?如果您使用 Data::Dumper;打印转储器($dir);在您的第一个示例结束时,数据结构看起来像您期望的那样吗?
-
我添加了第一个输入文件的示例。我把它放入数组的哈希中后,数据结构看起来和我预期的一样。
-
我正在为你想如何“分配不同的价值”而苦苦挣扎。您说“第一列”,但您使用第二列(注意从 split 中对数组的索引是从零开始的)。您想为哈希数组分配不同的值吗?还是您只是想临时分配一个值以用于打印目的?