2

私はテキストファイルをperlの配列に読み込んでおり、配列をループして処理を行っています。「開始」、「終了」、または「;」があるときはいつでも テキストのどこにいても、配列要素をそこで終了させ、それらのキーワードの後に​​続くものはすべて次の要素に入れて、後で要素を理解しようとするときに楽になるようにします。

これを実現するために、ファイル全体を配列に読み込み、すべての「begin」を「begin\n」に、「end」を「end\n」および「;」に置き換えることを考えました。「;\n」を使用して、この配列をファイルに書き戻し、そのファイルを配列に読み戻します。これはうまくいきますか?

面倒な余分な書き込みとファイルへの読み取りを使用するのではなく、これを行うためのよりエレガントな方法はありますか?

読み取りファイル ハンドルと書き込みファイル ハンドルを短縮する方法はありますか (電気回路の意味で)、テキスト ファイルへの書き込み全体をエスケープしながらも仕事を完了できますか?

グルラジ

4

2 に答える 2

2

split括弧を使用して、結果にセパレーターを保持できます。

open my $FH, '<', 'file.txt' or die $!;
my @array = map { split /(begin|end|;)/ } <$FH>;
于 2012-05-29T11:55:34.420 に答える
1

Perl のワンライナーを使用し、配列の操作を完全に避けたいと思います。

$ perl -pi -e 's#(?<=begin)#\n#g; s#(?<=end)#\n#g; s#(?<=;)#\n#g;' file.txt
于 2012-05-29T11:58:44.483 に答える