【发布时间】:2014-07-13 16:05:48
【问题描述】:
我正在尝试在 Perl 中编写一个函数,该函数将哈希和文件名作为输入。
基本上我的哈希是这样的,例如datahash是哈希的名称
datahash(Attr1) = 1
datahash(Attr2) = 5
datahash(Attr3) = 4
datahash(Attr4) = 6
我的文件是带有 Attr1,Attr2.. 的 csv,因为 csv 中的列名和哈希值是同一文件中的列号。
我的函数需要根据哈希键和值从文件中提取数据。任何线索或想法?它需要将文件的列名与哈希匹配,找出列号,然后提取列号的值。需要提取几列。
下面是我的代码:(不用担心我可以循环打印多次)
my %dataHash = %{$_[0]};
my $fileName = $_[1];
my @keys = keys %dataHash;
my @values = values %dataHash;
open my $info, $file;
while( my $line = <$info>)
{
my @arrdata = split(/,/, $line);
print @arrdata[values[0]];
print @arrdata[values[1]];
print @arrdata[values[2]];
print @arrdata[values[3]];
print @arrdata[values[4]];
print @arrdata[values[5]];
}
示例文件:
attr1,abc,def,ghi,attr3,attr2,attr4,attr5,attr6
1,2,3,4,5,6,7,8,9
11,12,13,14,15,16,17,18,19
11,12,13,14,15,16,17,18,19
11,12,13,14,15,16,17,18,19
所以哈希有我需要提取的列名和列号,文件是这样的。
【问题讨论】:
-
@keys的用途是什么?好像你没有在循环中使用它.. -
现在刚刚提取。大多数操作只需要通过值来完成
-
仍然不清楚你想要达到什么目标。请提供示例输入文件和该函数的预期输出。