2011-05-17 51 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

相關問題