我有以下文件:迭代一个简单的程序
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