如何知道CSV中有多少个元素.珀尔



我正在编写在CSV文件中读取并从中生成新的TXT文件的代码。问题是我不知道其行中有多少个要素。例如,它可以是

1,2,3,4,6
6,7,8,9,10

a,b,c
d,e,f

我正在使用文本:csv_xs,但是由于它是将行作为变量,所以我似乎无法获得其长度。有人可以帮助我解决这个基本问题吗?

open(OUTFILE,'>file.txt');
my $csv = Text::CSV_XS->new ({ binary => 1, eol => $/ });
# #fields is a variable so can't seem to do $fields_size = @fields for its length
my $fields = $csv->getline ($fh);
while (my $row = $csv->getline ($fh)){
    for(my $c=0; $c <=1 ; $c++)
        {print OUTFILE "$fields->[$c]=$row->[$c];";}
    print OUTFILE "n";     
}
close $fh;

在这里,我认为只有2个要素,但是我该如何制作:

 for(my $c =0; $c <=$fields_size ; $c++)

对于我的循环?

尽管您的问题本质上是"我如何获得数组中的元素数量",但看起来您是您真正的试图做的是打印CSV中每个字段的列标题和值。

要执行此操作,请使用text :: CSV的getline_hr代替getline,它将将CSV的每一行存储在哈希参考中。那么,您不必跟踪数组索引。以下以从左到右顺序打印每个字段和关联的列名:

# Set column names using first row in file
$csv->column_names($csv->getline($fh));
while (my $hr = $csv->getline_hr($fh)) {
    print "$_=$hr->{$_};" for $csv->column_names;
    print "n";
}

请注意,您的列名必须是唯一的。

您可以做:

my $fields = $csv->getline ($fh); 
my $size = scalar @$fields;

最新更新