Mule Dataweave带页眉和页脚的固定宽度文件
问题描述:
我正在处理一个项目,我们收到一个平面文件,但第一行和最后一行的信息不符合固定宽度模式。有没有一种方法可以正确地将所有这些信息编织成数据,并且如果可能的话,将页眉和页脚放入变量中,并在有效载荷中包含内容。Mule Dataweave带页眉和页脚的固定宽度文件
示例文件
HDMTFSBEUP00000220170209130400 MT HD07
DT01870977 FSFSS F3749261 CR00469002017020820170225 0000
DT01870978 FSFSS F3749262 CR00062002017020820170125 0000
TRMTFSBEUP00000220170209130400 000000020000002000000000000043330000000000000 0000
我知道CSV你可以跳过一条线,但没有看到它有固定的宽度,也页眉和页脚都将与前两个字母,每次所以也许他们可以开始通过dataweave过滤?
答
请参阅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
。
答
使用范围选择器可以跳过页眉和页脚。
payload[1..-2] map {
field1: $[0..15],
field2: $[16..31]
...,
...
}
[1..-2]
将从第2行选择到有效载荷中的第二行。
$[0..15]
将从第1列索引到第16索引中进行选择。 $[16..31]
选择从第17列索引到第32索引。
答
我正面临同样的问题,@sulthony h写的答案需要一些调整。我用这些线代替它,并为我工作。
data:
- { idRef: 'header', count: 1 }
- { idRef: 'data', count: '>1' }
- { idRef: 'footer', count: 1 }
页眉和页脚中缺少“count”,这是抛出异常。希望这可以帮助。