標題可能不那麼具有描述性。讓我來解釋:具有從另一個文本文件中獲取文本文件的索引
我有一個文件(文件說1)一些數字 [由空間分隔。看到這裏,
1 2 3 4 5
1 2 8 4 5 6 7
1 9 3 4 5 6 7 8
..... n lines (length of each line varies).
我還有一個文件(文件說2)有一些數字 [由標籤分隔。在這裏看到,
1 1 1 1 1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 0 1 1 1 1 1
1 1 1 1 1 1 0 1 1 1 1 1
..... m lines (length of each line fixed).
我想的1 2 3 4 5日(文件1行1)位置的文件2總和,線1
我想的總和1 2 3 4 5 6 7 th (文件1行2)位置文件2行1等。
我想文件的面向行總和2與位置在文件中的所有行1
它看起來像:
5 6 6 …n columns (File 1)
1 8 3
9 8 4
… m rows (File 2)
我這樣做是由下面的代碼:
open(FH1, "File1.txt");
@index = <FH1>;
open(FH2, "File2.txt");
@matrix = <FH2>;
open(OUTPUT, ">sum.txt");
foreach $xx (@matrix) {
@k1 = split(/\t/, "$xx");
foreach $yy (@index) {
@k2 = split(/ /, "$yy");
$ssum = 0;
foreach $zz (@k2) {
$zz1 = $zz - 1;
if ($k1[$zz1] == 1) {
$ssum++;
}
}
printf OUTPUT"$ssum\t";
$ssum = 0;
}
print OUTPUT"\n";
}
close FH1;
close FH2;
close OUTPUT;
它除了對大型文件的時間要求非常高以外,它的工作方式非常好。 (例如1000線文件1×25000行文件2:時間8分鐘
我的數據可能會超過4次這樣的例子,這是不能接受的我的用戶
如何做到這一點,消耗少得多。時間,或通過任何其他概念。
我想主要優點是XS'sum'這應該是比手挽的foreach快,而'split'在這裏不會被多次執行'@ indexes'元素。 – 2014-09-04 07:17:37
順便說一句,「打開」裏面的do塊的目的是什麼?限制$ fh範圍,並自動關閉文件? – 2014-09-04 07:20:51
那,以及這個代碼可讀的事實? :) – Miller 2014-09-04 07:21:39