我有以下文件:迭代一個簡單的程序
a b 5
c d 6
e f 7
g h 4
i j 3
k l 10
和我想找到哪一行呈現最小值在第三列和從初始文件擦除。在此之後,我想再次迭代該程序,並再次找到哪一行呈現最小值,並再次進行2次相同的操作。
輸出文件應該是
c d 6
e f 7
k l 10
我試着寫了下面的代碼:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
my $file1 = "try.dat";
open my $fg, "<", $file1 or die "Error during $file1 opening: $!";
my @vector;
while (<$fg>) {
push @vector, [ split ];
}
my $minimum = $vector[0][2];
my @blacklist;
for my $i (0 .. $#vector) {
if ($minimum > $vector[$i][2]){
$minimum = $vector[$i][2];
push @blacklist, @vector[$i+1];
}
}
#say "my minimum is $minimum";
#say "the blacklist is composed by @blacklist";
我不知道如何以擦除首先由@blacklist
(包含的元素案例應該是i j 3
)以及如何迭代一切。
迭代的任何幫助?
你應該編輯推'@blacklist,$ vector [$ i + 1]'並且它可以工作。關於如何擦除文件中的行並迭代它的任何想法? – 2013-03-14 17:26:01
在'splice @vector,$ min_idx,1;'這一行是什麼意思?如果我想使用「黑名單」數組,我該怎麼辦?如果($ minimum> $ vector [$ i] [2]){\ i = 0 [$ i] [2]),我嘗試了'爲我的$ i(0.. $#向量){0}。 push @blacklist,@vector [$ i + 1]; } } splice @vector,@blacklist;'但它不起作用 – 2013-03-15 08:45:48
'1'是長度或要移除的元素的數量。請參閱[文檔](http://perldoc.perl.org/functions/splice.html)。如果你想保留一個黑名單,在拼接前先推它。 (見編輯)。 'push @blacklist,$ vector [$ min_index];' – Nate 2013-03-16 02:51:10