我写了一个非常简单的脚本,它应该输出CSV文件第二行的第二个元素。但是,当我运行它时,我收到以下错误消息:"Uncaught exception from user code: CSV parse error: EIF - CR char inside unquoted, not part of EOL at csv.tester1.pl line 13"
我做错了什么?
这是实际代码:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use Tie::Array::CSV;
tie my @data, 'Tie::Array::CSV', 'ExampleData.csv';
my $length = scalar(@data);
print $length;
print "\n";
print $data[1][1];
虽然数据文件名为ExampleData.csv,但是:
25201927,5.62963E+14,B,100,203300,P
25201928,5.62963E+14,D,0,0,P
25201928,5.62963E+14,B,400,202500,P
答案 0 :(得分:0)
我怀疑这是因为CSV文件来自Windows但是在不同的平台上进行处理
Tie::Array::CSV
将记录分隔符硬编码为LF,这几乎适用于任何情况(包括在Windows系统上处理的Windows文件),但非原生处理的Windows文件的记录似乎以CR LF。该模块将仅剥离LF,在最后一个字段的末尾留下虚假的CR
如果我的推测是正确的(我目前无法测试,因为我的Windows机器上的系统磁盘今天下午死亡),那么您可以通过编写
将记录分隔符更改为CR LFtie my @data, 'Tie::Array::CSV', 'ExampleData.csv', tie_file => { recsep => "\r\n" };
我希望这会有所帮助