0

我有一个数据文件,其中包含如下行:

A1 2 3 4 5
B 1 2 4
B 7 8 9
A6 7 8 9
B 1 2 3
B 5 6 7
A3 6 9 7
B 2 3 3
B 5 6 6

使用 Perl,当解析器遇到请求时,如何将文件拆分为一组数组(或任何其他数据结构)/^A/?所以我最终得到

数组1:

A1 2 3 4 5
B 1 2 4
B 7 8 9

数组2:

A6 7 8 9
B 1 2 3
B 5 6 7

等等

非常感谢。

4

2 回答 2

4

我不得不重写答案(在重写问题之后)

@arrays = ();
while (<>) {
  push(@arrays, []) if /^A/;
  push(@{$arrays[-1]}, $_)
}
于 2012-07-15T12:59:39.103 回答
0

有时像这样,我希望$/可以不仅仅是一个字符串。尽管如此,还是有一些解决方法。

可以将文件吞入并使用前瞻断言进行处理。下面的示例仅打印以 分隔的每个字符串<< >>,但无论您想对数据做什么,基本思想都是相同的:

$ perl -0777 -wE 'say "<<$_>>" for split /(?=^A)/m, <>' file.txt
<<A1 2 3 4 5
B 1 2 4
B 7 8 9
>>
<<A6 7 8 9
B 1 2 3
B 5 6 7
>>
<<A3 6 9 7
B 2 3 3
B 5 6 6
>>
于 2012-07-15T14:07:40.590 回答