如何提取嵌入在非表格文本文件中的表格数据?

时间:2011-05-17 19:00:55

标签: regex perl text-processing text-parsing

有几千个报告一直格式化我需要提取的表格数据。

有一些想法,但我想发布一下,看看有没有比我想的更好的方法呢?这是提取表格数据,为它创建一个新文件,然后将该数据解析为表格文件。

这是一个示例输入和输出,其中输出读取和逐行写入数据库。

INPUT_FILE

MiscText MiscText MiscText
MiscText MiscText MiscText
MiscText MiscText MiscText
SubHeader
PASS    1283019238  alksdjalskdjl
FAIL    102310928301    kajdlkajsldkaj
PASS    102930192830    aoisdajsdoiaj
PASS    192830192301    jiasdojoasi
MiscText MiscText MiscText
MiscText MiscText MiscText
MiscText MiscText MiscText

OUTPUT (从文本文件到数据库逐行读/写)

ROW-01{column01,column02,column03}
...
ROW-nth{column01,column02,column03}

3 个答案:

答案 0 :(得分:2)

识别何时开始处理表格数据很容易。你有标记线。困难在于识别何时停止处理数据。当split未产生预期结果时,您可以应用停止的启发式处理数据。

use strict;
use warnings;
my $tab_data;
my $num_cols;
while ( <> ) {
    $tab_data = 1, next if $_ eq "SubHeader\n";
    next unless $tab_data;
    chomp;
    my @cols = split /\t/;
    $num_cols ||= scalar @cols;
    last if $num_cols and $num_cols != scalar @cols;
    print join( "\t", @cols ), "\n";
}

另存为etd.pl(etd =提取表格数据,您的想法是什么?),并从命令行调用它:

perl etd.pl < your-mixed-input.txt

答案 1 :(得分:1)

如果您知道如何提取数据,为什么要创建新文件而不是立即处理它?<​​/ p>

答案 2 :(得分:0)

如果这是固定宽度的数据,我强烈建议您使用unpack或普通的substr