2012-02-05 58 views
2

是否有讀取多行文本文件的一般算法/模式,其中一些行依賴於前面的文本文件?我指的是以下形式的數據:用於處理文本文件的常規算法/模式

H0 //start header 
HEADER1 
H9 //end header 
R0 RECORD1 
R0 RECORD2 
H0 //start header 
HEADER2 
H9 //end header 
R0 RECORD3 
R0 RECORD4 

其中需要將當前「標題」信息與每個以下記錄關聯的位置。

我意識到有這種類型的任務有無數的解決方案,但有經驗和測試模式,更有經驗的開發人員匯聚?

編輯: 我的直覺是,應該使用某種狀態機,諸如「閱讀標題」,「閱讀記錄」等狀態。我在正確的道路上嗎?

編輯: 雖然例子很簡單,這東西可以處理嵌套的高學歷將是可取的

回答

2

這可以看作爲一個分析問題,雖然語言的語法很簡單。這確實是regular,因此正確指出,FSM將起作用。一般來說,任何建立的解析技術都可以工作;如果使用recursive descent parsing,則會避免顯式狀態,這對於常規語言而言並不真正遞歸。以下是僞代碼:

function accept_file: 
    while not_eof 
     read_line; 
     case prefix of 
     "H0": accept_header; 
     "R0": accept_record; 
     otherwise: syntax_error; 

function accept_record: 
    make_record from substring of current_line from position 3; 

function accept_header: 
    read_line; 
    while current_line does not start with "H9" 
     add line to accumulated_lines 
    create header from accumulated_lines 
1

我同意KKM,這取決於如何「複雜」是你的語法,你可以考慮使用某種解析LIB像ply