我试图下载一个.csv文件到一个数组中,然后逐行解析每一列的Text :: CSV。我有以下几点:如何解析用Perl下载的CSV数据?
my @file = get("http://www.someCSV.com/file.csv") or warn $!;
my $CSV = Text::CSV->new();
$CSV->sep_char (',');
for (@file) {
$CSV->parse($_) or warn $!;
my @columns = $CSV->fields();
print $columns[0] . "\n";
}
而不是下载文件,保存它,然后它啜成一个文件句柄,我认为这将是更有效地只是把CSV文件到一个数组中,并从那里解析。但是,上面的代码不起作用,我不明白为什么。我收到“警告:test.pl出错了”;不是很有帮助,至少可以说。
这是更多的学习。我不需要这样做,但它只是在烦扰我为什么我无法将Text :: CSV与数组一起使用。
什么是get函数?从'LWP :: UserAgent'?你确认'@ file'的元素是来自'file.csv'的行吗? – 2010-10-03 22:56:31
我假设'get'来自'LWP :: UserAgent'?一般来说,你应该在代码中使用'使用XXX'部分。一个'get'与另一个不是一样的...... – dawg 2010-10-03 22:58:35
不太有用的“错误的东西”错误是因为你实际上没有告诉perl给你一个有用的错误。 '$!'只在系统调用失败时设置,对模块的调用通常不会设置'$!'。 “警告”或“死亡”包括描述性文本以及任何可应用的错误变量时,总是一种好的做法。像'......或警告'失败';''或'警告'解析失败';'。越具描述性越好。 '$!'被忽略,因为它可能不会被get或parse设置(但是检查他们的文档来验证)。在拉夫的回答中,您仍然希望将其包含在电话中打开 – 2010-10-04 15:42:39