我正在尝试从一个只存储唯一键的csv文件构建一个关联数组。所有这些都没有使用额外的功能,如Text::CSV一个示例文本文件:
emp1,dept1,1090
emp2,dept2,8920
emp3,dept1,3213
emp3,dept2,3234
我希望按部门组织数据,看起来像
$hash = {
dept=>[dept1, dept2, dept3]
}
并且在每个部门内具有其各自的EMP和ID
到目前为止,我试过
my %hash;
while (<$fh>){
my @data = split(/,/, $fh);
push @{$hash{$_}}, shift @data
for qw(emp dept id);
}
然而,这似乎并没有正确地填充数组,相反,只是初始化了没有数据的数组。我到处寻找如何做到这一点的例子,但我的搜索总是包含提到Text::CSV的人
1条答案
按热度按时间afdcj2ne1#
你的第一个问题是这条线
您正在拆分文件句柄,而不是从
while
语句返回的数据。它存储在$_
中下面是修改代码以修复
split
行。我还使用内联的DATA
文件句柄来使自己更容易。最后,我添加了对Data::Dumper
的调用,以查看将什么存储到哈希中。运行该命令将得到以下结果,这显示了第二个问题--您在
id
列中包含了一个换行符通过在
split
行之前调用chomp
来解决此问题输出现在为
这样看起来更好,但是在
hash
中有重复的数据。这样看起来更好-重复项已删除
您的要求是拥有数组的散列,因此添加最后一个步骤,将散列的散列转储为您需要的格式
输出这个