2010-02-26 70 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

相關問題