使用Tie :: File进行Perl文件操作

时间:2012-07-10 14:12:37

标签: perl file

我正在解析一个HTML文件,其中包含以网格方式关联的数据,并且即将完成。我以前认为需要删除所有空白行,但我没注意到网格中的某些字段是空白的。我现在尝试使用Tie :: File模块将文件存储在一个数组中,迭代它,如果有三个连续的空行,我想插入一个虚拟值,我可以稍后操作,以便空行剥离不会改变我的数据结构。

到目前为止我尝试过的(文件大约是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 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题(用“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