1

グリッドのような方法で関連付けられているデータを含む HTML ファイルを解析しています。以前は空白行をすべて削除する必要があると考えていましたが、グリッド内の一部のフィールドが空白であることに気付きませんでした。私は今、Tie::File モジュールを使用してファイルを配列に保存し、それを反復処理しようとしています。3 つの連続する空白行がある場合は、後で操作できるダミー値を挿入して、空白行を削除したいと考えています。私のデータの構造を変更しません。

これまでに試したこと(ファイルは〜2 MBです):

my @lines;
my $num = 0;
tie @lines, 'Tie::File', 'results.txt';
(tied @lines)->defer;

foreach (@lines)
{
    chomp $lines[$num];
    $num++;
    if ($lines[$num-1] =~ /^$/ && $lines[$num+1] =~ /^$/)
    {
        $lines[$num] = "null";
    }
}

(tied @lines)->flush;

untie @lines;

編集:配列を繰り返し処理して値を挿入し、各行の間にスペースを 1 つだけ入れて、後ですべての空白行を削除するにはどうすればよいですか?

4

1 に答える 1

1

問題を正しく理解している場合(3つの連続する空の行を「null」という単語と両側の空の行に置き換えます)、ファイルの内容を操作する次の正規表現が役立つ可能性があります。

use Modern::Perl;

my $htmlFile = do { local $/; <DATA> };

$htmlFile =~ s/(?<!\S)\n{3}/\nnull\n\n/g;

say $htmlFile;

__DATA__



A
B






C
D



E
F

Output:

null

A
B

null


null

C
D

null

E
F
于 2012-07-10T17:40:32.860 に答える