我有一个 CSV 文件,其中包含标题行和数据之前的注释文本,我想将其作为哈希读入以进行进一步操作。主键具有哈希值,将是两个数据值的组合。我如何?
示例 CSV
#
#
#
#
Description information of source of file.
index,label,bit,desc,mnemonic
6,370,11,three,THRE
9,240,23,four,FOR
11,120,n/a,five,FIV
示例所需的哈希
( '37011' => { 'index' => '6', 'label' => '370', 'bit' => '11', 'desc' => 'three', 'mnemonic' => 'THRE'}, '24023' => {'index' => '9', 'label' => '240', 'bit' => '23', 'desc' => 'four', 'mnemonic' => 'FOR'}, '120n/a' => {'index' => '11', 'label' => '120', 'bit' => 'n/a', 'desc' => 'five', 'mnemonic' => 'FIV'} )
最佳答案
您需要 Text::CSV模块:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
use Text::CSV;
my $filename = 'test.csv';
# watch out the encoding!
open(my $fh, '<:utf8', $filename)
or die "Can't open $filename: $!";
# skip to the header
my $header = '';
while (<$fh>) {
if (/^index,/x) {
$header = $_;
last;
}
}
my $csv = Text::CSV->new
or die "Text::CSV error: " . Text::CSV->error_diag;
# define column names
$csv->parse($header);
$csv->column_names([$csv->fields]);
# parse the rest
while (my $row = $csv->getline_hr($fh)) {
my $pkey = $row->{label} . $row->{bit};
print Dumper { $pkey => $row };
}
$csv->eof or $csv->error_diag;
close $fh;
关于Perl CSV 散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294807/