我正在尝试解析固定格式文本文件中的一些数据,其中每个“记录”分布在多行中,因此...
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 编码员
有没有更好的方法来处理这种解析?
最佳答案
您需要的是词法分析器。您的记录太大,无法使用单个正则表达式来解析,因此您必须为每一行编写一个正则表达式,并使用状态机来验证这些行是否按正确的顺序排列。
或者您可以使用通用词法分析器/解析器为您生成代码。维基百科有很长list . Gold解析器看起来是个不错的选择。
我不会尝试在 PowerShell 中进行词法分析/解析。我宁愿将代码编写为 C# 或 F#,并使用 PowerShell 中的程序集。
编辑:我刚刚查看了 FileHelpers 库。你可以创建一个 Multirecord Engine使用与源记录中的每一行匹配的 .NET 类型。然后您所要做的就是解析结果数组以获得有效顺序并创建对象。
关于c# - 解析多行固定格式文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9061324/