访问存储在.CSV文件中的数据

时间:2015-06-10 23:18:41

标签: perl csv runtime-error

我写了一个非常简单的脚本,它应该输出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

1 个答案:

答案 0 :(得分:0)

我怀疑这是因为CSV文件来自Windows但是在不同的平台上进行处理

Tie::Array::CSV将记录分隔符硬编码为LF,这几乎适用于任何情况(包括在Windows系统上处理的Windows文件),但非原生处理的Windows文件的记录似乎以CR LF。该模块将仅剥离LF,在最后一个字段的末尾留下虚假的CR

如果我的推测是正确的(我目前无法测试,因为我的Windows机器上的系统磁盘今天下午死亡),那么您可以通过编写

将记录分隔符更改为CR LF
tie my @data, 'Tie::Array::CSV', 'ExampleData.csv', tie_file => { recsep => "\r\n" };

我希望这会有所帮助