簡體   English   中英

Perl在數組文件中的特定行之間存儲數據

[英]Perl store data in between particular lines from a file in an array

說,我在文件中有此數據:

start
1
5
6
start
4
5
start
6
end

我希望這些數據存儲在像這樣的數組數組中

([1,5,6],[4,5],[6])

我用觸發器運算符嘗試過:

if(/start/../start/){
                my $line=<DATA>;
                print "$line \n";
                push(@data,$line) if($line=~/start/);
        }
}

它對我沒有用。 任何建議和幫助,我們將不勝感激。

我建議您使用下面編碼的算法

它逐行讀取文件,將每個值累加到數組@item 如果一行包含startend則將其視為邊界,而不是將其添加到@item ,而是將其內容作為塊復制到@data 然后@item被清空

use strict;
use warnings;

my (@data, @item);

while ( <DATA> ) {

    chomp;

    if ( /start|end/ ) {
        if ( @item ) {
            push @data, [ @item ];
            @item = ();
        }
    }
    else {
        push @item, $_;
    }
}

use Data::Dump;
dd \@data;

__DATA__
start
1
5
6
start
4
5
start
6
end

產量

[[1, 5, 6], [4, 5], [6]]

我可能不會使用范圍運算符,而是將$/設置為start\\n

例如

local $/ = "start\n";
my @stuff;
while ( <DATA>) {
     my @chunk = m/(\d+)/gm;
     push ( @stuff, \@chunk) if @chunk;
}
print Dumper \@stuff ;

反正就是這樣。

產量

$VAR1 = [
          [
            '1',
            '5',
            '6'
          ],
          [
            '4',
            '5'
          ],
          [
            '6'
          ]
        ];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM