0

我有一个 40K 行 EDI(固定长度)文件,我必须将其解析为 csv。如果您知道 edi,您就会知道每个元素都有自己的固定长度。

我是解析 EDI 的新手,只需要一点帮助。我的第一个想法是建立一个表格,将元素长度保存为数组或这样

Table EDIInfo
EDI_ID           |  EDI_ElemLengths

1                |  3,22,7s2,30,30,22
2                |  30,5s2,9s2,3,1,23

** 上面数组中的 s 表示从右数第二位的小数。

因此,一旦我将这些数据输入数据库,我不知道如何将其拉出以将其应用于我位于服务器上的文件。该文件此时是无扩展名的,它是一个简单的文本文件。我想直接把它解析成一个新的文件 XXXX.csv。

任何指向 tuts 或任何帮助/方向的链接将不胜感激。

如果你不知道 EDI,它基本上是一个文本文件,每行都有一个由“元素”组成的“记录”。每个“元素”在该行上允许有固定数量的字符,即使它不占用所有分配的空间。一个元素类似于一个字段(就像一个字段被定义为 varchar 64,一个元素由它在文本文件中允许使用的空格量定义)。元素相互碰撞,元素空间分配之外没有分隔符。

谢谢

4

1 回答 1

0

EDI 元素不是传统定义中的“固定长度”。不知道你从哪里得到这个想法。您的陈述:“如果您了解 edi,您就会知道每个元素都有自己的固定长度。” 是假的。您的陈述:“它基本上是一个文本文件,每行由“元素”组成的“记录”也是不正确的。如果您的段终止符是 CR 或 LF,您的文本编辑器会将其呈现为每行一个段。如果您的段终止符是波浪号 (~)?那么您的文件将是文本流。

根据 EDI 字典,一个元素可以有一个最小值/最大值。如果一个元素的最小值为 4 / 最大值为 8,则该元素是可变长度的,因为它不会填充到完整的 8 个字符。EDI 是结构化的分隔文件。唯一的固定长度段是 ISA(在 ANSI X12 中)

如果您使用 ANSI X12,则有三个分隔符:段、元素和子元素。您可以通过解析 ISA 段找到它们。一旦有了分隔符,就可以解析文件的其余部分。如果您通过分隔符进行解析,则唯一需要担心元素长度的情况是您是否根据标准字典进行语法检查——您可能对此不感兴趣。

如果您正在使用 EDIFACT,则适用相同的一般想法(您从包络中获取分隔符,但可以有六个分隔符)。我只是假设您正在使用 ANSI X12。

那里有大量的解析器。你正在重新发明轮子。现有的解析器甚至可能内置了 FA 生成和通信工具。如果您正在查看大量原始 EDI 数据并需要了解数据含义的上下文,请查看这个免费的 EDI 记事本工具:http://liaison。 com/产品/集成/编辑记事本

于 2012-11-13T17:00:08.617 回答