2010-02-26 67 views
5

我想从csv文件(830k记录)中提取特定的字段并存储到哈希中。在使用任何外部方法的情况下,是否有任何快速简单的方法可以在Perl中完成?如何从Perl中的CSV文件中提取字段?

我该如何做到这一点?

+0

非常类似于http://stackoverflow.com/questions/2174061/whats-the-best-way-to-read-a-huge-csv-file-using-perl – 2010-02-26 17:22:52

回答

11

使用Text::CSV_XS。它速度快,适度灵活,并且经过了很好的测试。许多这些问题的答案都是关于CPAN的。为什么花时间去做一些不如很多人已经完善和测试的东西?

如果您不想使用外部模块,这是一个愚蠢的反对意见,请查看Text :: CSV_XS中的代码并执行该操作。我经常感到惊讶的是,即使人们认为他们不能使用模块,他们也不会使用已知和经过测试的解决方案作为相同任务的示例代码。

+2

注意:不使用模块可能是外部要求或限制乔必须符合的给定环境。 – 2010-02-26 09:45:33

+2

注意:如果您可以编写代码,则可以安装模块。向商业人士解释说,你可以更好,更便宜,更快地获得它,这是一件容易的事情。 “但我想在没有任何工具的情况下建造一座房子!” – 2010-02-26 09:51:11

+1

我们已经拥有如此多的模块来完成大量的工作。所以限制是我不能使用任何外部模块。但在这种情况下。我想这会很好用。谢谢Brian – joe 2010-02-26 10:01:06

-1

参见本code fragmentThe Perl Cookbook这是一个伟大的书本身对Perl常见问题的解决

+1

我很抱歉把这本书的一个明显盗版的副本链接了起来:作者过去曾经让代码部分在线,而当我把链接放入时,我没有重复检查源代码。现在我发现相同代码的更好来源。 – 2010-02-26 11:13:52

-1

假设正常的CSV(即无嵌入的逗号),获得第二场例如采取

$ perl -F"," -lane 'print $F[1];' file 
-1

使用分割命令会做我想做的工作。 (猜测列由逗号和不存在于字段逗号分隔)

while (my $line = <INPUTFILE>){ 
    @columns= split ('<field_separator>',$line); #field separator is "," 
    } 

,然后从“列”阵列可以构造你喜欢的任何散列的元素。

+0

想知道为什么我放弃了投票。我的例子有什么问题吗? – taiko 2015-09-04 21:17:03

相关问题