代码之家  ›  专栏  ›  技术社区  ›  headcrash

如何使用while循环和拆分来总结逗号和换行分隔的CSV文件中的数据?

  •  1
  • headcrash  · 技术社区  · 2 年前

    Perl脚本必须加载到CSV数据文件中,并将文件中的所有数字相加。文件中只有用逗号和换行符分隔的数字。我想我已经完成了大部分代码,但我没有得到正确的总数。我可能忽略了一些东西,或者对一两个概念有根本性的误解,如果有任何帮助,我们将不胜感激。

    要汇总的CSV数据示例:

    2, 6, 7, 10, 12
    15, 22, 13
    11, 4
    1
    

    总数应该是103。

    我必须使用 while(<>) split 要读入数据,代码必须达到新手可以生成的水平,所以除非绝对必要,否则请不要使用高级代码。

    这是我的代码:

    use strict;
    use warnings;
    
    while (<>) {
            chomp;
            my $total = 0;
            my @array1 = split(',');
            foreach my $i (@array1){
            $total +=  $i;
    
            }
    print $total;
    }
    

    $total变量最终将数组中每一行的总和作为一个数字,我正在努力想办法重写它,让它做我想做的事情。非常感谢任何帮助。此外,如果提供的代码可以针对一个新手(类似于我提供的),那就太好了。

    2 回复  |  直到 2 年前
        1
  •  0
  •   toolic    2 年前

    在循环之前移动总额的初始化,并在循环之后移动打印:

    use strict;
    use warnings;
    
    my $total = 0;
    while (<DATA>) {
        chomp;
        my @array1 = split(',');
        foreach my $i (@array1) {
            $total +=  $i;
        }
    }
    print $total;
    print "\n";
    
    __DATA__
    2, 6, 7, 10, 12
    15, 22, 13
    11, 4
    1
    

    您的代码会在输入的每一行之后重置总数。

        2
  •  0
  •   Gilles Quénot ticktalk    2 年前

    像这样:

    use strict;
    use warnings;
    
    my $total = 0;
    
    while (<>) {
        chomp;
        my @array1 = split(',');
        foreach my $i (@array1){
            $total += $i ;
    
        }
    }
    print $total;
    

    检查我如何将变量声明放在其他地方 $total