【问题标题】:ACH Pattern Match in C#C# 中的 ACH 模式匹配
【发布时间】:2020-12-04 15:33:49
【问题描述】:

我正在开发自动票据交换所 (ACH) 应用程序,并且正在进行文件验证。

我需要验证 ACH 文件具有正确的记录类型模式。

模式是这样的:

    1 - File Record Header
    5 - Batch Record Header
    6 - Entry Detail Record
    7 - Addenda Record
    8 - Batch Control Record
    9 - File Control Record

数字是记录类型或行的第一个字符。文本描述了记录类型。

我想测试一个文件是否遵循上述模式..

一些变体,包括以下内容..

不需要补充记录

    1 - File Record Header
    5 - Batch Record Header
    6 - Entry Detail Record
    8 - Batch Control Record
    9 - File Control Record

文件可以有一个或多个批次..

1 - File Record Header
5 - Batch Record Header
6 - Entry Detail Record
7 - Addenda Record
8 - Batch Control Record
5 - Batch Record Header
6 - Entry Detail Record
7 - Addenda Record
8 - Batch Control Record
5 - Batch Record Header
6 - Entry Detail Record
7 - Addenda Record
8 - Batch Control Record
9 - File Control Record

文件记录头必须在文件的顶部,这样以下操作会失败...

5 - Batch Record Header
1 - File Record Header
6 - Entry Detail Record
7 - Addenda Record
8 - Batch Control Record
9 - File Control Record

RegEx 最适合这个吗?任何建议将不胜感激。

【问题讨论】:

    标签: c# pattern-matching text-files


    【解决方案1】:

    根据您的描述,这听起来像是一份迷你 DSL(领域特定语言)的工作。虽然 RegEx 在标记化输入方面将是一个好的开始,但我认为规则对于常规语言来说可能过于复杂。我会使用某种上下文无关语法 (CFG) 来表达语法,并编写一个解析器以确保正确遵循规则。在这种情况下,我不会仅仅依赖 RegEx。

    您已经为您的 DSL 定义了一套非常好的规则 - 将其转化为词法和句法语法将是下一步。该方法类似于编译器的前端部分 - 直至抽象语法树 (AST),然后您可以对其进行全面验证。没有后端(优化或代码生成) - 一旦你验证了你的解析树,你要么有语法错误(所以,输入被拒绝),或者结构正确(所以,输入被接受)。

    您可以利用语言识别工具,例如ANTLR,更快地开始。

    【讨论】:

      【解决方案2】:

      我同意 CoolBots,但是,如果您确实想要一个令人作呕的大量正则表达式,这应该根据我对您的要求的理解来工作:

      1 - File Record Header\n(5 - Batch Record Header\n6 - Entry Detail Record\n(7 - Addenda Record\n)?8 - Batch Control Record\n)+9 - File Control Record\n?
      

      这是一个正则表达式测试器的链接,其中包含您的示例: https://regexr.com/5a7ti

      【讨论】:

        猜你喜欢
        • 2012-12-17
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        相关资源
        最近更新 更多