如何在perl中读取csv文件的一部分

时间:2015-07-09 07:05:31

标签: perl

我有一个带有模式的CSV文件,如下所示:

split

我需要以下列模式将值保存在名为start_var1 val1 val2 abc 12 xyz 23 end_var1 pqr 32 start_var2 val1 val2 abc1 121 xyz1 232 end_var2 pqr1 341 var1_arr的不同数组中:

var2_arr

如果两行之间有任何行,并且每个数组的值分别介于val1(val2) start_var之间,则不应保存空行。

end_var

2 个答案:

答案 0 :(得分:1)

根据您的评论,要跳过一行,您可以这样写:

while (my $line = <$fh>)
{
    next if ($line =~ /start_var*/);    
    #do here whatever you want to do

}

答案 1 :(得分:0)

你可以使用Text::CSV_XS。 (那假设你有一个看起来像一个的csv文件,你粘贴的东西看起来像2放在一起)

use strict;
use Text::CSV_XS;

my $csv = Text::CSV_XS->new({binary => 1, auto_diag => 1, sep_char => ' '});

open(my $fh, "<", $filename) or die "$! $filename";

my $skip_heading = 1;
my $col1; # rename as appropriate of course
my $col2;
my $col3;
my @var1_arr;
my @var2_arr;
$csv->bind_columns(\$col1, \$col2, \$col3);
while ($csv->getline($fh)) {
    if ($skip_heading == 1) {
        $skip_heading = 0;
        next;
    }

    if ($col2 and $col3) {
        push(@var1_arr, "$col2($col3)\n");
    }
}