[英]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
。 如果一行包含start
或end
則將其視為邊界,而不是將其添加到@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.