我有一個代碼將所有文件中的所有向量相加。 可以有任意數量的輸入文件。例如第一個輸入文件是:如何識別n個文件中的第n行<>
0.55 0 0.3335 1.2
0.212 0 2.2025 1
,第二個是:
0.25 0 0.3333 1.0
0.1235 0 0.2454 1
我所得到的是所有矢量的總和,從而在結果我得到一個矢量 ,其是:
1.13550 0 3.1147 4.2
但我試圖總結第一個文件的第一個向量與第二個文件的第一個向量,依此類推。根據這個例子的結果,我應該得到2個向量。
現在我有這樣的:
use strict;
use warnings;
if ($ARGV[0] ne "vector1.dat"){
die ("vector1.dat is necessary as first argument");
}
my @sum = 0;
my $dim = 0;
while (<>) {
#Ignore blank lines, hashtags
#and lines starting with $
if ($_ =~ /#/ || $_ =~ /^$/ || $_ =~ /^\s$/){
next;
}
my @vectors = split(" ", $_);
my $vector_length = @vectors;
if ($dim eq 0) {
$dim = $vector_length;
}
else {
if ($dim ne $vector_length) {
die ("Vector dimensions do not match. : $!");
}
}
for (my $i = 0; $i <= $#vectors; $i++) {
$sum[$i] += $vectors[$i];
}
}
$" = "\t\t";
print "\n --- \n @sum \n";
我需要的就是找出如何識別每個文件的第n行 和總結這些行的列值,同時牢記,有能是n個文件。 我看到文件處理問題在這裏與類似的問題,但 我沒有在那裏找到我的答案。 只是尋找一些建議和指導。卡住了這個。
您應該在shebang行上使用'warning'all''優先於'-w'。不要同時使用 – Borodin
'my @sum = 0'?這是什麼意思?第一個元素爲0的數組? – TLP
如果您打算使用'/^$ /'來檢查以美元符號'$'開頭的行,那麼這將不起作用,因爲'$'是一個正則表達式元字符。你在下一個正則表達式中偶然顯示的內容。 – TLP