我正在尝试将 .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和数组。
答案 0 :(得分:11)
我假设您在那里使用LWP::Simple
的{{1}}功能。这不会返回响应正文的行列表,而是返回包含响应正文的字符串。所以起初,你可能意味着:
get
您现在可以逐行阅读,将每行传递给my $content = get($uri);
Text::CSV
方法。这似乎在某些情况下有效,但由于CSV文件可能包含嵌入的换行符,因此它不会非常可靠。
相反,让parse
通过传递它可以自己读取的文件句柄来确定输入中究竟是什么行。为此,无需在本地保存文件。您只需打开字符串句柄即可:
Text::CSV