解析多行固定格式文本文件

6

我正在尝试解析一个文本文件中的数据,其中每个“记录”分布在多行上,如下所示...

 MAILBOX: 10013      Created: 01/20/09  4:39 pm
    MSGS: 0         UNPLAYED: 0           URGENT: 0          RECEIPT: 0
  LCOS: RBC Standard    : 20            FCOS: RBC Standard      : 20 
  GCOS: Default GCOS 1  : 1             NCOS: Default           : 1 
  TCOS: Default TCOS 1  : 1             RCOS:                   : 1 
BAD LOGS: 0         LAST LOG: NEVER                             MINS:      0.0
  PASSWD: Y            TUTOR: N              DAY: M            NIGHT: M       
    NAME:                                   CODE: 
   EXTEN: 10013                            INDEX: 0
ATTEN DN:                                  INDEX: 0         
DISTRIBUTION LISTS WITH CHANGE RIGHTS:
    all
DISTRIBUTION LISTS WITH REVIEW RIGHTS:
    all

我以前用过File Helpers处理单行记录,非常有用。查看它的文档,它确实具有MultiRecordEngine功能,但这将意味着...
  • 每行都需要一个类... 没有问题
  • 计算每个固定格式字段的确切大小... 繁琐且容易出错
  • 检查每行的逻辑

我发现另外一个问题是固定格式实际上不是固定的,即根据目标记录有不同的格式行,因此有些行有21行,有些有22、23、24等。

我找到了一个Java平面文件解析库FFP,但我是.NET、C#和PowerShell编码人员。

有更好的处理这种解析的方法吗?

2个回答

4
你需要的是一个词法分析器。你的记录太大,不能使用单个正则表达式来解析,所以你必须为每一行编写一个正则表达式,并编写一个状态机来验证行的正确顺序。
或者你可以使用通用的词法分析器/解析器来为你生成代码。维基百科上有很长的listGold解析器看起来是一个不错的选择。
我不会尝试在PowerShell中进行词法分析/解析。我宁愿用C#或F#编写代码,并从PowerShell使用程序集。 编辑:我刚刚看了FileHelpers库。你可以使用与源记录中每行匹配的.NET类型创建一个Multirecord Engine。然后你只需要解析结果数组以获得有效的顺序并创建对象。

感谢回复...哦!这比我想象的要复杂得多 :-( - SteveC
是的,那正是我想要的方向,但我希望能有一个更简单的解决方案。 - SteveC

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接