【问题标题】:Perl file manipulation using Tie::File使用 Tie::File 操作 Perl 文件
【发布时间】:2012-07-11 01:40:32
【问题描述】:

我正在解析一个 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;

编辑:如何遍历数组并插入值,以便每行之间只有一个空格,以便以后可以删除所有空行?

【问题讨论】:

  • 请发布一些示例输入和所需的输出。

标签: perl file


【解决方案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

【讨论】:

  • 感谢您的提示,我想我的逻辑是错误的。
  • @squiguy:不客气!我不知道你的逻辑是错误的;以上仅提供了不同的解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-05-29
  • 2011-10-25
  • 2012-08-29
  • 2015-05-31
  • 2012-10-23
  • 1970-01-01
  • 2010-10-15
  • 2011-09-14
相关资源
最近更新 更多