【问题标题】:How to read in multiple lines into one array or hash until the next line fits certain criteria in Perl?如何将多行读入一个数组或散列,直到下一行符合 Perl 中的某些条件?
【发布时间】:2013-09-18 03:21:43
【问题描述】:

如果我想将具有相同元素的多行读入一个数组或散列,直到到达具有不同元素的下一行。这些元素已经排序,因此它们彼此相邻。例如:

1_1111  1234
1_1111  2234 
1_1111  3234
1_1112  4234
1_1112  5234
1_1112  6234
1_1112  7234
1_1113  8234
1_1113  9234

我想将具有相同元素 1_1111 的前三行读入一个数组,对其进行处理,然后读取具有相同元素 1_1112 的下几行

【问题讨论】:

    标签: arrays perl hash readline readfile


    【解决方案1】:
    my $key;
    my @nums;
    while (<>) {
       my @fields = split;
       if (@nums && $fields[0] ne $key) {
          process($key, @nums);
          @nums = ();
       }
    
       $key = $fields[0];
       push @nums, $fields[1];
    }
    
    process($key, @nums) if @nums;
    

    【讨论】:

    • 谢谢@这就是我要找的东西!
    【解决方案2】:

    您可以将文件读入数组哈希:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    my %hash;
    while (<DATA>) {
        my ($key, $value) = split /\s+/;
        push @{ $hash{$key} }, $value;
    }
    
    __DATA__
    1_1111  1234
    1_1111  2234
    1_1111  3234
    1_1112  4234
    1_1112  5234
    1_1112  6234
    1_1112  7234
    1_1113  8234
    1_1113  9234
    

    散列的键对应于左列中的数字,而值是右列中的数字数组。现在您可以遍历哈希并按照您的意愿处理它。

    【讨论】:

    • 谢谢!但我想逐行处理的原因是文件太大。这适用于较小的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2010-09-27
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多