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 に答える