0

私は簡単な質問があります..

特定のマルチライン インスタンスを照合しようとしています。問題は、コードを実行すると、ファイル全体ではなく、編集したものだけが出力されることです。

例えば。これは私の入力です:

JJJ
1234          123.00     1234.28               123456.00     1234567.72 constant
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc.

私の目標は取得することです:

JJJ 1234          123.00     1234.28               123456.00     1234567.72 constant
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc.

JJJしたがって、基本的には、1 つ以上の大文字の行またはその他のバリエーションまでデータを丸呑みしようとしています。

ただし、これを行うと、次のようになります。

JJJ 1234          123.00     1234.28               123456.00     1234567.72 constant

私はそれだけを取得し、ファイルに必要な他の情報は取得しません。簡単な解決策があることは知っていますが、私は非常に慣れperlていないため、よくわかりません。

これが私のコードです。おそらく、あなたの中には提案があるでしょう。

use File::Slurp;
my $text = read_file( 'posf.txt' );
while ($text =~ /(^[A-Z]+)(\d+.*?\.\d+ Acquired$)/gism) {
$captured = $1." ".$2;
$captured =~ s/\n//gi;

print $captured."\n";
}

どんな助けでも素晴らしいでしょう。プログラムに「キャプチャ済み」を印刷するように指示しているだけであることはわかっていますが、ファイルの残りの部分を印刷して、行を目的の位置まで丸呑みする方法がわかりません。

私の質問が理にかなっていて、理解するのが難しくないことを願っています。さらに問い合わせることができるかどうか教えてください.

4

1 に答える 1

0

うまくいけば、私はあなたの問題を正しく理解しました.大文字のみを含むテキストのすべての行の後にある改行を削除したい. このコードを試してください:

#!/usr/bin/perl

use strict;
use warnings;

my $text = qq{JJJ
1234          123.00     1234.28               123456.00     1234567.72 constant
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc.
JJJ
1234          123.00     1234.28               123456.00     1234567.72 constant
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc.
};

$text =~ s/(^[A-Z]+) #if the line starts with at least 1 capital letter
      \r?            #followed by optional \r - for DOS files
      \n$/           #followed by \n
      $1 /mg;        #replace it with the 1-st group and a space
print $text;

それは印刷します:

JJJ 1234          123.00     1234.28               123456.00     1234567.72 constant
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc.
JJJ 1234          123.00     1234.28               123456.00     1234567.72 constant
ld;afksd;l REst of file blah blah blah...rest of file and other info I neeed etc.

テストデータを表示するためにファイルからテキストを読みませんでした。しかし、簡単に通話を追加できread_fileます。

于 2013-07-23T17:10:08.977 に答える