2011-05-17 54 views
0

有几千个报告一直格式化我需要提取的表格数据。如何提取嵌入在非表格文本文件中的表格数据?

有几个想法,但我想我会张贴,看看是否有更好的方式来做到这一点比我想的;即提取表格数据,为其创建一个新文件,然后将该数据解析为表格文件。

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

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(读取文本文件DB /写一行一行地)

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

回答

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 
+0

@迈克尔路德维希:谢谢,看起来不错 - 尽管看起来我错过了一些东西。我已经用$ tab_data获取示例数据在我的问题的正文中发布了代码。当我在Perl调试器中运行代码时,我在while语句中一直使用(Ptkdb)perl崩溃/挂起。有什么想法发生了什么,或者我错过了什么?再次,谢谢! – blunders 2011-05-17 19:37:54

+1

@blunders,脚本期望在标准输入“STDIN”上传输数据。打开命令提示符并尝试一下。 - 啊,请把你的编辑恢复到原来的文章 - 这完全是误导性的,而不是完全意图。谢谢。 – Lumi 2011-05-17 19:47:15

+0

+2 @迈克尔路德维希:回复了问题的主体。尽管走出办公室几个小时,但请期待在24小时内回复此内容。再次谢谢你! – blunders 2011-05-17 19:59:14

1

如果你知道如何提取数据,为什么要创建一个新的文件,而不是立即处理它?

+0

+1 @zvrba:这就是我想要做的,但我仍然必须弄清楚如何去做;我使用的所有代码至今为OPEN 一个文件,使用WHILE ,然后关闭该文件;不知道如何将其转换为换行符来解析文本。至于提取数据,我只知道这是可能的;更新了样本数据以便更好地了解我的意思;作为子标题总是相同的,并且表格数据一直持续到下一行没有(PASS或FAIL)。 – blunders 2011-05-17 19:17:09

0

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

相关问题