【发布时间】:2016-12-16 05:20:26
【问题描述】:
我正在尝试使用Text::CSV 来解析这个CSV file。这是我的做法:
open my $fh, '<', 'test.csv' or die "can't open csv";
my $csv = Text::CSV_XS->new ({ sep_char => "\t", binary => 1 , eol=> "\n"});
$csv->column_names($csv->getline($fh));
while(my $row = $csv->getline_hr($fh)) {
# use row
}
因为文件有 169,252 行(不包括标题行),我希望循环运行那么多次。但是,它只运行 8 次并给了我 8 行。我不确定发生了什么,因为 CSV 看起来就像一个普通的 CSV 文件,其中 \n 作为行分隔符,\t 作为字段分隔符。如果我像这样遍历文件:
while(my $line = <$fh>) {
my $fields = $csv->parse($line);
}
然后循环遍历所有行。
【问题讨论】:
-
在打开显示所有字符/显示空白的文本编辑器中仔细查看文件,大约在第 8 行或第 9 行。也许有一个额外的选项卡,或者缺少选项卡,或者未转义的选项卡。我还会尝试将 CSV 文件导入电子表格,以检查所有列是否正确设置。
-
你能显示几个连续的行,其中一些可以,一些不可以吗? (好的是前八个,还是一些“随机”的?)在你检查了丢失的东西之后,根据Mathew Lock的评论。
-
使用 Data::Dumper 并转储每一行以查看它处理的最后一行是什么