Nic*_*ard 2 arrays perl file-io
我试图简单地弹出每个数值并将它们加在一起以获得总数.
输入文件:
Samsung 46
RIM 16
Apple 87
Microsoft 30
Run Code Online (Sandbox Code Playgroud)
我的代码编译...但它只返回0.
open (UNITS, 'units.txt') || die "Can't open it $!";
my @lines = <UNITS>;
my $total = 0;
while (<UNITS>) {
chomp;
my $line = pop @lines;
$line += $total;
}
print $total;
Run Code Online (Sandbox Code Playgroud)
如果你只是想用它来循环遍历它们,就不需要将所有行都插入到数组中while.此外,您需要split每行获取您的号码.
use warnings;
use strict;
open (UNITS, 'units.txt') || die "Can't open it $!";
my $total = 0;
while (<UNITS>) {
chomp;
my $num = (split)[1];
$total += $num;
}
print "$total\n";
__END__
179
Run Code Online (Sandbox Code Playgroud)
这里有三个问题
您正在尝试添加字符串 'Samsung 46' + 'RIM 16'
您将整个文件读入@lines,然后尝试从while循环中的文件中读取更多内容.永远不会输入该循环,因为您已经读取到文件结尾
您正在循环中添加$total(未声明的)变量$line,而不是相反.所以$total保持为零,并$line保持零添加
while除非您需要对记录进行顺序访问以外的其他操作,否则最好使用读取文件,因此删除@lines是一个开始.
目前还不完全清楚你想要积累哪部分记录.该程序将空行分割为空白,并将每行的最后一个字段加在一起.
你必须始终 use strict并use warnings在每个程序的开头.这是一种措施,可以更容易地找到代码中的错误.最好使用词法文件句柄而不是你使用的全局句柄和三参数形式open.
use strict;
use warnings;
open my $units, '<', 'units.txt' or die "Can't open it: $!";
my $total;
while (<$units>) {
my @fields = split;
$total += $fields[-1];
}
print $total;
Run Code Online (Sandbox Code Playgroud)
产量
179
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |