我试图在一个固定格式的文本文件中解析一些数据,其中每个“记录”都分布在多行中,因此.
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我以前在单行记录中使用过档案助手,它非常有用。检查它的文档,它确实有一个MultiRecordEngine特性,但这意味着.
我发现的另一个缺点是,固定格式实际上不是固定的,即根据目标记录有不同的格式行,所以有些有21行,有些有22、23、24等。
我找到了一个Java平面文件解析库FFP,但是我是一个.NET,C#,PowerShell编码器
是否有更好的方法来处理这种解析?
发布于 2012-01-30 09:18:22
你需要的是一个雷克萨斯。您的记录太大,无法使用单个Regex进行解析,因此必须为每一行编写一个regex,并编写一个状态机来验证这些行是否遵循正确的顺序。
或者您可以使用通用的lexer/解析器为您生成代码。维基百科有很长的列表。黄金解析器看起来是一个很好的候选。
我不会尝试在PowerShell中进行词法/解析。我宁愿将代码编写为C#或F#,并使用PowerShell中的程序集。
编辑:,我刚刚看了FileHelpers库。您可以创建一个具有与源记录中每一行相匹配的多记录发动机类型的.NET。然后,您所要做的就是解析结果数组中的有效顺序并创建对象。
发布于 2012-01-30 11:53:29
我在powershell中做了类似的工作,并发现在这里的字符串中使用regex要容易得多:
http://mjolinor.wordpress.com/2012/01/05/powershell-multiline-regex-matching/
https://stackoverflow.com/questions/9061324
复制相似问题