我有一个包含浮点数的行的文件,如下所示:
1.66278886795044
1.61858296394348
1.66523003578186
1.62150096893311
1.6725389957428
我正在尝试打开该文件,计算所有行的平均值,然后将平均值写入同一文件。如果5
代表项目数量,那么预期的输出将是:
1.66278886795044
1.61858296394348
1.66523003578186
1.62150096893311
1.6725389957428
================
AVERAGE after 5 runs: 1.6481283664703
考虑到我可以从脚本$amountofloops
中的较高位置获取运行量,我认为这样做:
open(my $overviewhandle, '>>', 'overview.txt');
chomp( my @durations = <$overviewhandle> );
my $avgtime = 0;
foreach my $duration (@durations) {
$avgtime += $duration;
}
$avgtime = $avgtime / $amountofloops;
print $overviewhandle "================\nAVERAGE after $amountofloops runs: $avgtime";
close $overviewhandle;
然而,$avgtime
一直返回零,我不知道为什么。我认为这个数字不会被解析为数字。
答案 0 :(得分:4)
您应始终将use strict
和use warnings
添加到您编写的任何Perl程序的顶部。他们将帮助您找到错误。
在这种情况下,你会看到错误:
仅为输出
打开Filehandle $ overviewhandle
在我看来,这个问题非常明显。
答案 1 :(得分:3)
文件的打开模式是错误的。您需要将其置于读/写模式,而不是追加模式
open(my $overviewhandle, '+<','overview.txt');
chomp( my @durations = <$overviewhandle> );
my $avgtime = 0;
foreach my $duration (@durations) {
$avgtime += $duration;
}
$avgtime = $avgtime / scalar @durations;
print $overviewhandle "================\nAVERAGE after $amountofloops runs: $avgtime";
close $overviewhandle;
答案 2 :(得分:0)
open my $in, '<', 'in.txt' or die $!;
my $count = 0;
my $total;
while(<$in>){
$count++;
$total += $_;
}
open my $out, '>>', 'in.txt' or die $!;
my $average = $total/$count;
print $out "\n================\n";
print $out "AVERAGE after $count runs: $average\n";