創建文本文件,從多維數組TEMP.TXT有內容類似這樣的文件:在Perl
ABC 1234 56 PQR
XYZ 8672 12 RQP
如何將TEMP.TXT文件存儲到一個二維數組,這樣我就可以通過訪問它們數組索引?
創建文本文件,從多維數組TEMP.TXT有內容類似這樣的文件:在Perl
ABC 1234 56 PQR
XYZ 8672 12 RQP
如何將TEMP.TXT文件存儲到一個二維數組,這樣我就可以通過訪問它們數組索引?
use File::Slurp;
use Data::Dumper;
my @arr = map [split], read_file("temp.txt");
print Dumper \@arr;
輸出
$VAR1 = [
[
'ABC',
'1234',
'56',
'PQR'
],
[
'XYZ',
'8672',
'12',
'RQP'
]
];
至少,你可以這樣做
my @file = load_file($filename);
sub load_file {
my $filename = shift;
open my $fh, "<", $filename or die "load_file cannot open $filename: $!";
my @file = map [ split ], <$fh>;
return @file;
}
這將讀取參數文件,拆分上空白的內容並把它一個數組引用(每行一個)內,然後返回與數組的數組裁判。在退出子程序時,文件句柄將被關閉。
在某些方面,這是一個有點笨重的解決方案。它將整個文件加載到內存中,在查找特定值時沒有特別快速的查找等。如果每行都有唯一鍵,則可以使用散列而不是數組來進行查找速度快:
my %file = map { my ($key, @vals) = split; $key => \@vals; } <$fh>;
注意,鍵必須是唯一的,或者他們會互相覆蓋。
或者您可以使用Tie::File
只查找你想要的值:
use Tie::File;
tie my @file, 'Tie::File', $filename or die "Cannot tie file: $!";
my $line = [ split ' ', $file[0] ];
或者,如果你有你的文件的行特定的分隔符,以及與CSV格式相符的格式,可以使用Tie::File::CSV
use Tie::File::CSV;
tie my @file, 'Tie::Array::CSV', $filename, sep_char => ' '
or die "Cannot tie file: $!";
my $line = $file[0];
注意,使用該模塊可能是矯枉過正,如果你沒有一個嚴格的csv格式可能會導致問題。此外,Tie::File
也有降低性能的聲譽。哪種解決方案最好取決於您的需求和偏好。
也許你會感興趣的模塊'領帶:: File'或'領帶::陣列:: CSV'。 – TLP
此外,這個問題可以根據您的上下文有不同的最佳解決方案,所以您應該解釋爲什麼您需要一個二維數組,並顯示您打算使用它的代碼。 – TLP
您想通過數組索引? – fugu