这个循环该怎么改
my $i=2;
do {
open (OUT,">$st[$i]") or die"$!";
print OUT "in1 in2\n";
while (<IN>) {
chomp;
if (/^\d/) {
my @line=split/\s+/;
if ($line[$i]==0) {
next;
} print OUT "$line[0]\t$line[1]\n";
}
}
$i++;
} while ($i <= 100);
上面的程序总是得不到想要的结果。我的目的是i的初始值为 2,当i小于等于100的时候,要运行那个while循环(while循环是对文件进行操作,而i与文件中的一些序号有关联),也就是说最终要得到的是98个文件(文件名来自于文件中的第一行),可是我运行之后虽然也得到了98个文件,但是文件内容都是空的,但是我如果不用循环来操作的话(也就说一个一个i来赋值),就可以得到想要的结果,但是这样的话很不现实,总不能一个一个来赋值,请高手指点
do {
open (OUT,">$st[$i]") or die"$!";
print OUT "in1 in2\n";
while (<IN>) {
chomp;
if (/^\d/) {
my @line=split/\s+/;
if ($line[$i]==0) {
next;
} print OUT "$line[0]\t$line[1]\n";
}
}
$i++;
} while ($i <= 100);
上面的程序总是得不到想要的结果。我的目的是i的初始值为 2,当i小于等于100的时候,要运行那个while循环(while循环是对文件进行操作,而i与文件中的一些序号有关联),也就是说最终要得到的是98个文件(文件名来自于文件中的第一行),可是我运行之后虽然也得到了98个文件,但是文件内容都是空的,但是我如果不用循环来操作的话(也就说一个一个i来赋值),就可以得到想要的结果,但是这样的话很不现实,总不能一个一个来赋值,请高手指点
作者: 超级细菌 发布时间: 2011-05-31
第一次执行过后 IN 都 eof 了还怎么读?那个循环就没意义了
作者: zhlong8 发布时间: 2011-05-31
回复 zhlong8
那应该再怎样让程序重新读文件呢?
那应该再怎样让程序重新读文件呢?
作者: 超级细菌 发布时间: 2011-05-31
不是Perl问题,是人品问题。
作者: 2gua 发布时间: 2011-05-31
在do 结构的内部最后让读文件句柄重新回到最开始处
seek(IN, 0, 0);
seek(IN, 0, 0);
作者: Cu_fans 发布时间: 2011-05-31
回复 Cu_fans
多谢!原来seek还有这个功能,受教了!
多谢!原来seek还有这个功能,受教了!
作者: 超级细菌 发布时间: 2011-05-31
98 个文件,有必要循环那么多次吗?读一次搞定不就行了
作者: zhlong8 发布时间: 2011-05-31
只进行一次循环,我也这样想过,但是没有思路,求指教。多谢!
作者: 超级细菌 发布时间: 2011-05-31