我需要从CSV文件中获取特定字段并将其放入数组中。我不知道该怎么做。这是我到目前为止所尝试过的。
#!/usr/bin/perl
use strict;
use warnings;
my @array = <>;
my @fields = split ",", @array;
print @fields[2];
这是CSV文件的示例
9988,Kathleen,Brown,kbrownc@goo.gl,OH,Female,Italian
9989,Antonio,Ford,afordb@bigcartel.com,IL,Male,
9990,Diana,Banks,dbanksa@jalbum.net,MA,Female,English
答案 0 :(得分:3)
如果您的CSV文件有可能包含带引号的字段(以便每个字段本身可能包含逗号),那么您应该使用Text::CSV
来正确处理数据。但是,对于您问题中的简单数据,只使用split
。
您的代码看起来像这样。请注意,通常不必将整个文件读入内存,逐行处理的内存效率更高。它还倾向于将程序员的注意力集中在一条线上,从而改善最终的设计。
use strict;
use warnings;
my @names;
while ( <> ) {
chomp;
my @fields = split /,/;
push @names, $fields[2];
}
print "$_\n" for @names;
<强>输出强>
Brown
Ford
Banks
<强>更新强>
如果您对map
感到满意,那么您可能更喜欢这个。它更加简洁,但是与你自己的代码一样效率低下,因为它会立即将整个文件读入内存(尽管它会立即再次丢弃它)。除非文件很大,否则不应该成为问题。
use strict;
use warnings;
my @names = map { chomp; ( split /,/ )[2]; } <>;
print "$_\n" for @names;
答案 1 :(得分:-1)
有一个perl模块可以处理许多文件格式,包括csv。您可以通过运行以下命令安装模块:
$ sudo cpan install Text::CSV;
现在,您将能够轻松地获得所需的逗号分隔符解析(这是默认设置)或指定任何其他字符。
安装perl模块后,这是一个快速完成任务的脚本。我创建了一个文本文件,其中包含名为test.csv
的数据。
#!/usr/bin/perl
use strict;
use warnings;
require Text::CSV;
my $csv = Text::CSV->new;
open (DATA, "<test.csv") or die "Can't open file...";
while (<DATA>) {
$csv->parse($_);
my@fields = $csv->fields();
print $fields[2];
}
close DATA;
您可以通过运行以下内容查看Text :: CSV模块的其他功能来查看文档:
$ perldoc Text::CSV