我有一个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,元素由允许在文本文件中使用的空间量定义)。元素相互碰撞,元素空间分配之外没有分隔符。
谢谢
答案 0 :(得分:0)
EDI元素不是"固定长度"按传统定义。不知道你有什么想法。你的陈述:"如果你知道edi,你知道每个元素都有自己的固定长度。"是假的。您的陈述:"它基本上是一个带有"记录"的文本文件。在由"元素和#34;组成的每一行上也是不正确的。如果您的段终止符是CR或LF,则文本编辑器会将其呈现为每行的段。如果你的段终止符是波浪号(〜)怎么办?那么你的文件将是一个文本流。
根据EDI字典,元素可以具有最小/最大值。如果一个元素的最小值为4 / max 8,则该元素的长度可变,因为它不会填充到完整的8个字符。 EDI是一个结构化的分隔文件。唯一的固定长度段是ISA(在ANSI X12中)
如果您正在使用ANSI X12,则有三个分隔符:segment,element和subelement。您可以通过解析ISA段找到它们。一旦有了分隔符,就可以解析文件的其余部分。如果您要通过分隔符进行解析,那么您唯一需要担心的是元素长度,如果您要对标准字典进行语法检查 - 您可能并不感兴趣。
如果你正在使用EDIFACT,同样的一般想法适用(你从包络中得到分隔符,但可以有六个分隔符)。我只是假设您正在使用ANSI X12。
那里有很多解析器。你正在重新发明轮子。现有的解析器甚至可能有FA生成和内置的通信工具。如果您正在查看大量原始EDI数据并需要关于数据含义的上下文,请查看此免费EDI记事本工具:{{3} }