以下是一個出貨訂單的信息例子,你可以看到每行的前三個字就是該行的數據類型,「:」、「+」是數據分隔符,然後你就拿出對方給你的信息規範文檔,那個一看就會長出白頭髮的文檔,先不要急着寫代碼,要先好好消化它,找出信息分組和層級標籤,還有你需要的數據,以這次的例子來說,「CPS」就是它的分組標籤,「CPS+1++3」裏,1 是第幾組,3是第幾層。
了解了這幾個後就要說說抓取的方法:
1. 逐行讀入並放進變量
2. 檢查變量的前三位,遇到分層標籤就準備按值寫到不同的表,這個例子有四層,分別是訂單頭、貨物要求量、要求批次、要求包裝單位,所以需要建立四個臨時表,我是以 Stored Procedure 處理的,所以會以 create table #temp_header 的寫法建表,在讀取到分層標籤時,你就知道要按層級寫到不同的臨時表中。
3. 寫一個 function(),投入分隔符及第幾位後就能反饋相關的值。
4. 以這function() 取值,以「MEA+WT+AAC+KGM:16971.000」為例,function( +, 4),「+」號分隔的第四組是「KGM:16971.000」,再以function( :, 2)就能取到「16971.000」了
5. 取完需要的值後就把臨時表關連起來,按層級寫到臨時訂單表中,我的EDI系統就只負表寫到臨時訂單表,用戶有需要時才會從中抽出臨時單生成業務系統的真正訂單。
主要就是分類、分組、取值三個要素,每家公司放值的位置都不一樣,只能每次再寫了。
----- 我是分隔線 -----
UNA:+.? ' -- 這裏標明將會用上的各種符號
UNB+UNOX:3+STUPID+ABC:14+191229:1543+00000156630080'
UNH+1129076452+DESADV:D:01B:UN'
BGM+781+1129076452+9'
DTM+111:20200301:102'
DTM+137:20191229001200:204'
MEA+WT+AAC+KGM:16971.000' -- 前三位是類型,然後再層層分類,這裏是度量+重量+毛重+單位+數值
MEA+WT+AAD+KGM:19971.000'
RFF+CW:00001'
RFF+AAJ:1129076452:EL'
NAD+SE+AC56+STUPID UK LLC++1 DRIVE+BURKVILLE+AL+36123+US'
NAD+BY+PC09+STUPID (HK):Co., Ltd.++No.1 Avenue, Western+MOON++511876+NN'
LOC+19+PC12'
LOC+14+PC09'
TOD+1'
CPS+1++3' -- 分組及分層標籤
PAC+1+3+PC12-00828:::24000 KG X 1 BULK+:BKS::'
MEA+AAU+T:12+KG:3000.000'
MEA+AAU+L:12+KG:24000.000'
LIN+000010++001234000022017980:BP'
IMD+A++:161::ML5221-111N-BKS-00-00-00'
MEA+WT+AAE+KGM:1.000'
MEA+WT+AAF+KGM:1.000'
QTY+21:0.000:KGM'
RFF+CO:4503645856:STO:000010'
DGS+ZZZ+N'
CPS+2++2' -- 分組及分層標籤
PAC+1+2+PC12-00828:::24000 KG X 1 BULK+:BKS::'
MEA+AAU+T:12+KG:3000.000'
MEA+AAU+L:12+KG:24000.000'
LIN+900001++001234000022017980:MF+1:000010+1'
IMD+A++:161'
MEA+WT+AAE+KGM:19970.000'
MEA+WT+AAF+KGM:16970.000'
QTY+21:16970.000:KGM'
ALI'
GIN+BX+0012224323:'
RFF+CO:4503645856:STO:000010'
DGS+ZZZ+N'
CPS+3++1' -- 分組及分層標籤
PAC+1+1++:000000000025017001::BKS (BULK SEA CONTAINER)'
LIN+900001++'
MEA+WT+AAB+KGM:17032.000'
MEA+WT+AAA+KGM:16970.000'
GIN+BJ+00387191334077688698:U'
DGS+ZZZ+N'
UNT+45+1129076452' -- 45 指不包含 UHA 的總行數
UNZ+1+00000156630080'