2012-11-13 75 views
0

我有一個40K行的EDI(固定長度)文件,我必須解析成csv文件。如果你知道edi,你就知道每個元素都有自己的固定長度。用php/mysql解析EDI文件

我剛剛解析EDI,只需要一點幫助。我首先想到的是陣列中設置一個將保持元件的長度是作爲數組或作爲該

Table EDIInfo 
EDI_ID   | EDI_ElemLengths 

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

的表**的S上方表示十進制ofter從右邊的第二位。

因此,一旦我將這些數據存入數據庫,我不知道如何將它拉出來將其應用於我在服務器上找到的文件。該文件在這一點上是無擴展名的,它是一個簡單的文本文件。我想直接將它解析成一個新的文件XXXX.csv。

任何鏈接到tuts或任何幫助/方向將不勝感激。

如果您不知道EDI,它基本上是一個文本文件,每行由「元素」組成的「記錄」。每個「元素」在該行上允許固定數量的字符,即使它沒有佔用所有分配的空間。一個元素與一個字段類似(就像一個字段被定義爲諸如varchar 64一樣,一個元素由它允許在文本文件中使用的空間量來定義)。元素互相碰撞,元素空間分配之外沒有分隔符。

謝謝

回答

0

EDI元素不是傳統定義的「固定長度」。不知道你有什麼想法。你的陳述:「如果你知道edi,你就知道每個元素都有自己的固定長度。」是錯誤的。你的聲明:「它基本上是一個由」元素「組成的每一行都帶有」記錄「的文本文件也是不正確的。如果你的段終止符是CR或LF,你的文本編輯器將把它作爲每行的段來呈現。你的段結束符是一個代字符(〜)嗎?那麼你的文件就是一個文本流

根據EDI字典,元素可以有最小值/最大值如果元素有最小值4 /最大值8,元素是可變長度,因爲它不能填充到全部8個字符EDI是一個結構化的分隔文件唯一固定長度的段是ISA(在ANSI X12中)

如果您使用的是ANSI X12 ,有三個分隔符:段,元素和子元素,你可以通過解析ISA段找到它們,一旦你有了分隔符,你就可以解析文件的其餘部分。如果您使用分隔符進行分析,那麼您唯一需要考慮元素長度的情況是,如果您使用標準字典進行語法檢查 - 您可能不感興趣。

如果您使用EDIFACT,則適用相同的總體思路(您可以從包絡中獲得分隔符,但可以有6個分隔符)。我只是假設你正在使用ANSI X12。

這裏有很多解析器。你正在重新發明輪子。現有的解析器甚至可能具有FA生成以及內置的通信工具。如果您正在查看大量原始EDI數據並需要關於數據含義的上下文,請看下面這個免費的EDI記事本工具:http://liaison.com/products/integrate/edi-notepad

+0

我不同意與您一樣,有時EDI文件可能沒有定界符,如下所示:00.00140名稱供應商(其中前5個字符表示一行,然後所有位置都已修復) – davidbonachera

+0

給我一個傳統EDI文檔的示例,標準(ANSI X12,EDIFACT),沒有分隔符。固定長度的文件(不帶分隔符的記錄)不被視爲傳統的EDI文件。 – Andrew

+0

對於物流公司來說,一些倉庫管理系統實施純粹的定位EDI解決方案。傳統的EDI我不知道它對你意味着什麼,但在歐洲,我不確定當他們在舊的IBM i系列(AS/400)上構建EDI時,他們是如此的標準。 – davidbonachera