首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析多行固定格式文本文件

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

Stack Overflow用户
提问于 2012-01-30 08:50:15
回答 2查看 1.7K关注 0票数 6

我试图在一个固定格式的文本文件中解析一些数据,其中每个“记录”都分布在多行中,因此.

代码语言:javascript
运行
复制
 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编码器

是否有更好的方法来处理这种解析?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-30 09:18:22

你需要的是一个雷克萨斯。您的记录太大,无法使用单个Regex进行解析,因此必须为每一行编写一个regex,并编写一个状态机来验证这些行是否遵循正确的顺序。

或者您可以使用通用的lexer/解析器为您生成代码。维基百科有很长的列表黄金解析器看起来是一个很好的候选。

我不会尝试在PowerShell中进行词法/解析。我宁愿将代码编写为C#或F#,并使用PowerShell中的程序集。

编辑:,我刚刚看了FileHelpers库。您可以创建一个具有与源记录中每一行相匹配的多记录发动机类型的.NET。然后,您所要做的就是解析结果数组中的有效顺序并创建对象。

票数 4
EN

Stack Overflow用户

发布于 2012-01-30 11:53:29

我在powershell中做了类似的工作,并发现在这里的字符串中使用regex要容易得多:

http://mjolinor.wordpress.com/2012/01/05/powershell-multiline-regex-matching/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9061324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档