2011-10-03 60 views
0

Hej尖銳的頭腦!將txt文件讀入perl的散列

我需要將文本文件加載到散列。一行是關鍵,下一行是價值。那重複數百萬次。任何建議如何以最好的方式做到這一點?

如果讓我們說鍵是15個字符和值是50個字符,散列表需要多少內存?

由於

回答

5

下面的代碼應該加載文本文件轉換成散列:

my %hash; 

while (chomp(my $key = <DATA>)) { 
    chomp(my $val = <DATA>); 
    $hash{$key} = $val; 
} 

散列條目的存儲器開銷將取決於體系結構(32與64位),但是應該大約爲散列本身的幾百字節,然後每個鍵和值大約30-60字節,加上鍵和值數據類型的開銷。您可以使用Devel::Size自行檢查。也read this

所以在你的例子,一個64位的平臺上,一百萬條目應大致花費:

136散列

58 + 15 + 58 + 50 181 ==每鍵/值對x 1,000,000

對於您指定大小的百萬條目,爲181MB。

+0

感謝您提供豐富的答案。正是我所期待的。 – iggy

+0

我在「./test.pl 16行, 10000行中獲得chomp中未初始化值$ key的使用」。這是測試文件的最後一行......我看到$ key獲取undef的方式,但有沒有辦法解決這個問題? – iggy

+0

@iggy:你可以將代碼封裝在一個沒有警告的未初始化的編譯指示塊中,或者將read('<>')從'chomp'中分開,並在繼續循環之前檢查鍵/值的定義。這只是示例代碼,當然需要針對您的需求進行微調。 –