我有以下输入文件:
test.csv
done_cfg,,,,
port<0>,clk_in,subcktA,instA,
port<1>,,,,
我想将每个CSV列的元素存储到一个数组中,但是当我在运行脚本时尝试在csv中获取那些“null”元素时,总是会出错。这是我的代码:
# ... assuming file was correctly opened and stored into
# ... a variable named $map_in
my $counter = 0;
while($map_in){
chomp;
@hold_csv = split(',',$_);
$entry1[$counter] = $hold_csv[0];
$entry2[$counter] = $hold_csv[1];
$entry3[$counter] = $hold_csv[2];
$entry4[$counter] = $hold_csv[3];
$counter++;
}
print "$entry1[0]\n$entry2[0]\n$entry3[0]\n$entry3[0]"; #test printing
每当我获取空CSV单元格时,我总是遇到use of uninitialized value
错误
你能帮我找一下我代码中的错误(因为我知道我的代码有些遗漏了吗?)
感谢。
答案 0 :(得分:1)
这看起来像CSV。所以工作的工具真的是Text::CSV
。
我还建议 - 有4个带编号名称的不同数组对我说,你可能首先想要一个多维数据结构。
所以我会做类似的事情:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Text::CSV;
my $csv = Text::CSV->new( { binary => 1 } );
open( my $input, "<", "input.csv" ) or die $!;
my @results;
while ( my $row = $csv->getline($input) ) {
push ( @results, \@$row );
}
print join ( ",", @{$results[0]} ),"\n";
print Dumper \@results;
close($input);
如果你真的想要单独的数组,我建议给它们命名不同的东西,但你可以这样做:
push ( @array1, $$row[0] ); #note - double $, because we dereference
我会注意到 - 你的代码中有错误 - 我怀疑:
while($map_in){
正在做你认为的事情。
答案 1 :(得分:0)
当您分配$entryN
时,请定义默认值:
$entry1[$counter] = $hold_csv[0] || '';
与其他@entry
我认为while($map_in) {
中存在拼写错误while (@map_in) {
。