2017-03-15 65 views
0

我正在處理一個項目,我們收到一個平面文件,但第一行和最後一行的信息不符合固定寬度模式。有沒有一種方法可以正確地將所有這些信息編織成數據,並且如果可能的話,將頁眉和頁腳放入變量中,並在有效載荷中包含內容。Mule Dataweave帶頁眉和頁腳的固定寬度文件

示例文件

HDMTFSBEUP00000220170209130400   MT              HD07 
DT01870977   FSFSS F3749261   CR00469002017020820170225      0000 
DT01870978   FSFSS F3749262   CR00062002017020820170125      0000 
TRMTFSBEUP00000220170209130400 000000020000002000000000000043330000000000000     0000 

我知道CSV你可以跳過一條線,但沒有看到它有固定的寬度,也頁眉和頁腳都將與前兩個字母,每次所以也許他們可以開始通過dataweave過濾?

回答

1

請參閱DataWeave Flatfile Schemas文檔。處理幾種不同類型的數據有幾個例子。

在這種情況下,我試圖簡化您的示例數據,並應用自定義模式如下:

示例數據:

HDMTFSBEUP00000220170209130400   
DT01870977   
DT01870978   
TRMTFSBEUP00000220170209130400 

模式/平面文件定義:

form: FLATFILE 
structures: 
- id: 'test' 
    name: test 
    tagStart: 0 
    tagLength: 2 
    data: 
    - { idRef: 'header' } 
    - { idRef: 'data', count: '>1' } 
    - { idRef: 'footer' } 
segments: 
- id: 'header' 
    name: header 
    tag: 'HD' 
    values: 
    - { name: 'header', type: String, length: 39 } 
- id: 'data' 
    name: data 
    tag: 'DT' 
    values: 
    - { name: 'code', type: String, length: 17 } 
- id: 'footer' 
    name: footer 
    tag: 'TR' 
    values: 
    - { name: 'footer', type: String, length: 30 } 

該模式將驗證示例數據,並根據標籤(前兩個字母)進行標識。輸出將被相應分組。

{ 
    "header": {}, 
    "data": [{}, {}], 
    "footer": {} 
} 

由於預期的結果僅僅是數據,然後選擇它:payload.data

0

使用範圍選擇器可以跳過頁眉和頁腳。

payload[1..-2] map { 
    field1: $[0..15], 
    field2: $[16..31] 
    ..., 
    ... 
} 

[1..-2]將從第2行選擇到有效載荷中的第二行。

$[0..15]將從第1列索引到第16索引中進行選擇。 $[16..31]選擇從第17列索引到第32索引。

0

我正面臨同樣的問題,@sulthony h寫的答案需要一些調整。我用這些線代替它,併爲我工作。

data: 
    - { idRef: 'header', count: 1 } 
    - { idRef: 'data', count: '>1' } 
    - { idRef: 'footer', count: 1 } 

頁眉和頁腳中缺少「count」,這是拋出異常。希望這可以幫助。

相關問題