使用php/mysql解析EDI文件



我有一个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。

如有任何教程链接或任何帮助/指导,我们将不胜感激。

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

谢谢

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

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

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

如果您使用EDIFACT,同样的一般思想也适用(您可以从包络中获得分隔符,但可以有六个分隔符)。我只是假设您使用的是ANSI X12。

外面有很多解析器。你正在重新发明轮子。现有的解析器可能甚至内置了FA生成和通信工具。如果你正在查看大量原始EDI数据,并且需要了解数据含义的上下文,请查看这个免费的EDI记事本工具:http://liaison.com/products/integrate/edi-notepad

最新更新