【发布时间】:2020-10-23 21:53:18
【问题描述】:
我有一个 CSV 文件,其中包含如下数据:
我想从上面的 csv 文件中解析数据并将其存储在最初的哈希中。所以我的哈希转储器%hash 看起来像这样:
$VAR1 = {
'1' => {
'Name' => 'Name1',
'Time' => '7/2/2020 11:00'
'Cell' => 'NCell1',
'PMR' => '1001',
'ISD' => 'ISDVAL1',
'PCO' => 'PCOVAL1'
},
'2' => {
'Name' => 'Name2',
'Time' => '7/3/2020 13:10',
'Cell' => 'NCell2',
'PMR' => '1002',
'PCO' => 'PCOVAL2',
'MKR' => 'MKRVAL2',
'STD' => 'STDVAL2'
},
'3' => {
'Name' => 'Name3',
'Time' => '7/4/2020 20:15',
'Cell' => 'NCell3',
'PMR' => '1003',
'ISD' => 'ISDVAL3',
'MKR' => 'MKRVAL3'
},
};
脚本如下:
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
use Data::Dumper;
my %hash;
my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1 });
open my $fh, "<:encoding(utf8)", "input_file.csv" or die "input_file.csv: $!";
while (my $row = $csv->getline ($fh)) {
my @fields = @$row;
$hash{$fields[0]}{"Time"} = $fields[1];
$hash{$fields[0]}{"Name"} = $fields[2];
$hash{$fields[0]}{"Cell"} = $fields[3];
}
close $fh;
print Dumper(\%hash);
这里id是每一行中的一个关键元素,根据数据值,每个数据应该存储在一个id的相应名称中。
这里的问题是,直到列 D (Cell) 我能够在上面的脚本中解析数据,并且在 D 列之后不会有标题行,就像 E 列将充当标题和列F 是特定标头的特定 id 的值。类似的情况会出现在其余的数据值上,直到结束。在中间我们可以看到一些值也会丢失。例如,id 1 没有 MKR 值。
如何解析这些数据并将其存储在哈希中,以便我的哈希看起来像上面那样。 TIA。
【问题讨论】: