用于处理文本文件的通用算法/模式

时间:2012-02-05 11:03:54

标签: python design-patterns pseudocode

是否存在用于读取多行文本文件的通用算法/模式,其中某些行依赖于前面的行?我指的是以下形式的数据:

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

需要将当前“标题”信息与每个后续记录相关联。

我意识到这类任务有无数的解决方案,但是有经验丰富的开发人员聚集在一起的经过试验和测试的模式吗?

编辑: 我的直觉是,人们应该使用某种状态机,状态如“阅读标题”,“阅读记录”等。我是否在正确的道路上?

编辑: 虽然这个例子很简单,但是可以处理更高程度嵌套的东西是可取的

2 个答案:

答案 0 :(得分: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 :(得分:1)

我同意kkm,取决于你的语法“复杂”,你可以考虑使用某种解析库,如ply