【问题标题】:Parse EDI file with php / mysql使用 php / mysql 解析 EDI 文件
【发布时间】:2012-11-01 16:36:46
【问题描述】:

我有一个 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,一个元素由它在文本文件中允许使用的空格量定义)。元素相互碰撞,元素空间分配之外没有分隔符。

谢谢

【问题讨论】:

  • 请分享一个示例文件。你确定这是有效的 EDI 吗?

标签: php mysql parsing edi


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我不同意你的观点,有时 EDI 文件可以是没有分隔符的位置,例如:00.00140 NAME SUPPLIER(前 5 个字符标识一行,然后所有位置都固定)
  • 给我一个传统 EDI 文档的示例,该文档遵循没有分隔符的主要标准(ANSI X12、EDIFACT)。固定长度文件(没有分隔符的记录)不被视为传统的 EDI 文件。
  • 对于物流公司,一些仓库管理系统实施了纯位置EDI解决方案。传统 EDI 我不知道它对您意味着什么,但在欧洲,当他们在旧的 IBM i 系列 (AS/400) 上构建这些 EDI 时,我不确定它们是否如此标准。
猜你喜欢
  • 2021-07-27
  • 2012-02-10
  • 2011-01-04
  • 2017-06-08
  • 2023-03-18
  • 2021-12-23
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多