[英]adding array list perl
我有一个文本文件,其数字列表由空行分隔,如下所示-我想添加所有第一个(20.187 + 19.715 + 20.706 ...),第二个元素(15.415 + 14.726 + 15.777),以此类推每个元素的第一,第二,第三等的总计
20.187 15.415 8.663 6.001 6.565 6.459 6.564 ..
19.715 14.726 8.307 5.833 6.367 6.089 6.444 ..
20.706 15.777 9.185 6.546 7.327 7.172 7.084 ...
由于它们不是按列排列的,所以我该如何添加数组的元素。
使用split
获取所有字段。 跟踪数组中的运行总计(其索引已映射到文件中的列)。
像这样:
while (<$file>)
{
chomp;
my $index = 0;
$total[$index++] += $_ for split;
}
请注意,默认情况下, split
在空白处进行分割。 如果愿意,可以使用其他定界符。
编辑:可悲的是,既然这个问题已经得到澄清,这个答案是无用的。 请改用Brian Roach的答案。
编辑:从一个澄清的问题,需要处理空白行和一系列数字被分解成多行的可能性。
my @totals;
my @currentVals;
while (my $line = <FILE>)
{
chomp($line);
if ($line eq "")
{
for ($i = 0; $i < @currentVals; $i++)
{
@totals[$i] += @currentVals[$i];
}
@currentVals = ();
}
else
{
push @currentVals, split(' ', $line);
}
}
这应该做您想要的。 您需要继续添加到currentVals数组中,直到碰到空白行,然后进行数学运算。
use strict;
use warnings;
# Paragraph mode (so that blank lines become our input delimiter).
local $/ = "\n\n";
my @totals;
while (<>){
my $i;
$totals[$i++] += $_ for split;
}
您可以尝试这样的事情:
my @sum;
while (<>) {
chomp;
my @items = split /\s+/;
for (my $i=0; $i<@items; $i++) {
$sum[$i] += $items[$i];
}
}
$sum[$i]
将包含列$i
的总数。
或者,稍微“完成”:
my @sum;
while (<>) {
chomp;
my @items = split;
for my $i (0 .. $#items) {
$sum[$i] += $items[$i];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.