如何使用Perl解析下载的CSV数据?

时间:2010-10-03 22:47:39

标签: perl

我正在尝试将 .csv 文件下载到数组中,然后使用Text :: 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和数组。

1 个答案:

答案 0 :(得分:11)

我假设您在那里使用LWP::Simple的{​​{1}}功能。这不会返回响应正文的行列表,而是返回包含响应正文的字符串。所以起初,你可能意味着:

get

您现在可以逐行阅读,将每行传递给my $content = get($uri); Text::CSV方法。这似乎在某些情况下有效,但由于CSV文件可能包含嵌入的换行符,因此它不会非常可靠。

相反,让parse通过传递它可以自己读取的文件句柄来确定输入中究竟是什么行。为此,无需在本地保存文件。您只需打开字符串句柄即可:

Text::CSV