【发布时间】:2012-05-12 04:48:59
【问题描述】:
这个问题不是 Perl 特有的,(尽管unpack 函数很可能会出现在我的实现中)。
我必须处理存在多种格式的文件,以便将数据分层分解为有意义的部分。我想做的就是将文件数据解析成合适的数据结构。
这是一个例子(RHS 的评论):
# | Format | Level | Comment
# +--------+-------+---------
**DEVICE 109523.69142 # 1 1 file-specific
.981 561A # 2 1
10/MAY/2010 24.15.30,13.45.03 # 3 2 group of records
05:03:01 AB23X 15.67 101325.72 # 4 3 part of single record
* 14 31.30474 13 0 # 5 3 part of single record
05:03:15 CR22X 16.72 101325.42 # 4 3 new record
* 14 29.16264 11 0 # 5 3
06:23:51 AW41X 15.67 101323.9 # 4 3
* 14 31.26493219 0 # 5 3
11/MAY/2010 24.07.13,13.44.63 # 3 2 group of new records
15:57:14 AB23X 15.67 101327.23 # 4 3 part of single record
* 14 31.30474 13 0 # 5 3 part of single record
15:59:59 CR22X 16.72 101331.88 # 4 3 new record
* 14 29.16264 11 0 # 5
我现在的逻辑很脆弱:
- 例如,我知道 Format 2 总是在 Format 1 之后,而且它们只跨越 2 行。
- 我还知道格式 4 和 5 总是成对出现,因为它们对应于单个记录。记录的数量可能是可变的
- 我正在使用正则表达式来推断每一行的格式。但是,这是有风险的,并且在未来(当有人决定更改输出格式时)不会带来灵活性。
这里最大的问题是我可以采用哪些策略来确定哪条线路需要使用哪种格式。我很想知道其他人是否遇到过类似的情况,以及他们为解决这个问题做了什么。
【问题讨论】:
标签: perl