我的问题是,我想分解文件并将碎片插入数组中。
从NONVSAM(整行)到PC文件(整行)。
所以在$ array [0]中我保存了第一个块,在$ array [n]中保存了最后一个块。
我有一个这样的文件:
NONVSAM - XXXPROD.YYY.XLIST
Y A DynP LSEQ 0 0 00000000 00000000 20150807 87654321
PC文件 - / shared / xx / dir / dir2 / xxx /
NONVSAM - XXXPROD.ZZZ.XYZZZ
Y A DynP LSEQ 0 0 00000000 00000000 20150807 12345678
PC文件 - / shared / xx / dir / dir2 / xxx / ...
...
...
答案 0 :(得分:0)
这是一种完成工作的方法:
#!/usr/bin/perl
use Modern::Perl;
use warnings;
use Data::Dumper;
my @arr;
my @tmp;
while(<DATA>) { # read the file one line at a time
chomp; # remove the linebreak
push @tmp, $_; # store the line in a temporary array
if (/^PC File/) { # if the line begins with PC File
push @arr, join"\n",@tmp; # Sat=ve all the line in the result array
@tmp = (); # re-init the temp array
}
}
say Dumper\@arr;
__DATA__
NONVSAM - XXXPROD.YYY.XLIST
Y A DynP LSEQ 0 0 00000000 00000000 20150807 87654321
PC File - /shared/xx/dir/dir2/xxx/
NONVSAM - XXXPROD.ZZZ.XYZZZ
Y A DynP LSEQ 0 0 00000000 00000000 20150807 12345678
PC File - /shared/xx/dir/dir2/xxx/ ...
<强>输出:强>
$VAR1 = [
'NONVSAM - XXXPROD.YYY.XLIST
Y A DynP LSEQ 0 0 00000000 00000000 20150807 87654321
PC File - /shared/xx/dir/dir2/xxx/',
'NONVSAM - XXXPROD.ZZZ.XYZZZ
Y A DynP LSEQ 0 0 00000000 00000000 20150807 12345678
PC File - /shared/xx/dir/dir2/xxx/ ...'
];
答案 1 :(得分:0)
如果NONVSAM
行始终跟在NONVSAM
行之后,那么每次$ main.pl data.txt
出现时只需启动一个新的数组元素就可以轻松完成此操作
此程序需要命令行上输入文件的路径,如此
Data::Dump
请注意,我仅使用@data
来显示use strict;
use warnings 'all';
my @data;
while ( <> ) {
push @data, '' if /^NONVSAM/;
$data[-1] .= $_;
}
use Data::Dump;
dd \@data;
数组的最终内容
[
"NONVSAM - XXXPROD.YYY.XLIST\nY A DynP LSEQ 0 0 00000000 00000000 20150807 87654321\nPC File - /shared/xx/dir/dir2/xxx/\n",
"NONVSAM - XXXPROD.ZZZ.XYZZZ\nY A DynP LSEQ 0 0 00000000 00000000 20150807 12345678\nPC File - /shared/xx/dir/dir2/xxx/\n",
]
{{1}}