读取EDI格式化文件

Bra*_*don 13 parsing edi x12

我是EDI的新手,我有一个问题.

我已经读过,通过查看ISA行的最后3个字符,您可以获得有关EDI格式的大部分内容.如果每个EDI都使用换行符来分隔实体,这很好,但我发现很多都是单行文件,其中任意数量的字符用作中断.我注意到我解析的每个EDI中的最后一个字符都是break字符.我看了几百个,发现没有例外.如果我第一次抓住那个角色,并使用它来获得ISA线的最后3个,我是否应该合理地期望我能够解析来自EDI的数据?

我不知道这是否有帮助,但EDI'类型'往往是850,875.我不确定这是否是标准,但值得一提.

Don*_*son 14

edi的交易类型并不重要(850 = order,875 = grocery po).写了几个edi解析器,这里有一些我发现的东西:

你应该能够指望ISA(和仅ISA)是固定宽度(如果内存服务,则为105个字符).去掉前105个字符.之后和第一次出现"GS"之前的所有内容都是你的行终止符(这可以是任何东西,包括一个0x07 - 嘟嘟声 - 所以请注意,如果你输出到stdout进行调试,或者你可能会发出一连串的哔哔声在演讲者之外).通常这是1或2个字符,有时它可以更多(如果发送数据的人由于某种原因添加额外的终止符).一旦有了行终止符,就可以得到段(字段)分隔符.我通常会拉出GS线的3个字符并使用它,尽管ISA线的第4个字符也可以正常工作.

还要注意,你可以获得一个包含多个ISA的文件.在这种情况下,您不能指望每个ISA内的行或字段分隔符是相同的.

另一件事......也可能(再次,不确定它的规格)edi文件是否具有可变长度ISA.这是非常罕见的,但我必须适应它.如果发生这种情况,您必须将该行解析为其字段.ISA中的最后一个字段只有一个字符长,因此您可以从中确定ISA的实际长度.如果是我,我不会担心这个,除非你看到这样的文件.这是一种罕见的现象.

我上面所说的可能不是"规范"的字母......也就是说,我不确定在同一个文件中有不同的行分隔符是合法的,但在不同的ISA中,但它在技术上是可能的我容纳它,因为我必须处理以这种方式出现的文件.edi处理器我每天使用超过5000个可能的数据来源处理超过5000个文件(所以我看到很多奇怪的东西).

最好的问候,不要

  • 你要小心一点。我看到很多文件中人们在行终止符后放置了一两个额外的字符......通常是一个空或两个(0x00)。我所做的是首先规范文件中的行终止符 - 即使用 0x0D/0x0A 作为行终止符重写文件。我这样做是因为它使文件易于在文本编辑器中阅读。然后我浏览该文件并确保每个 ISA 都有一个匹配的 IEA。如果 IEA 之后有额外的数据,我通常会丢弃它。如果 IEA 之后的数据以 ISAt 开头,则意味着它是部分传输(错误情况)。 (2认同)
  • 我见过这种情况,但这种情况非常罕见 - 我与很多相关方打交道,有时其中一个会将以前单独的数据放入一个文件中并导致这种情况。我的软件可以处理它(我认为)。我不会担心。让发件人修复问题可能比适应问题更容易。 (2认同)