Mule Dataweave固定宽度文件,带页眉和页脚

时间:2017-03-15 17:40:45

标签: mule flat-file fixed-width dataweave

我正在处理一个项目,我们收到一个平面文件,但第一行和最后一行的信息不符合固定宽度模式。有没有办法正确地对所有这些信息进行数据编织,如果可能的话,将页眉和页脚放入变量中,并将内容放在有效载荷中。

示例文件

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

我知道对于CSV,你可以跳过一行,但是看不到它有固定的宽度,而且页眉和页脚都会以前两个字母开头,所以也许它们可以通过dataweave过滤?

3 个答案:

答案 0 :(得分:2)

请参阅DataWeave Flatfile Schemas文档。处理几种不同类型的数据有几个例子。

在这种情况下,我尝试简化您的示例数据,并应用自定义架构,如下所示:

示例数据:

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_filter_category);

        setSupportActionBar(toolbar);

        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowTitleEnabled(false);

            //back button action
            toolbar.setNavigationOnClickListener(view -> finish());
        }
    }

架构/平面文件定义:

HDMTFSBEUP00000220170209130400           
DT01870977         
DT01870978         
TRMTFSBEUP00000220170209130400  

架构将验证示例数据,并根据标记标识前2个字母。输出将相应地分组。

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": {} }

答案 1 :(得分:0)

使用范围选择器跳过页眉和页脚。

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

[1..-2]将从第2行选择,直到有效载荷中的第二行。

$[0..15]将从第1列索引到第16个索引进行选择。 $[16..31]从第17列索引到第32索引进行选择。

答案 2 :(得分:0)

我遇到了同样的问题,@ sulthony h写的答案需要一些调整。我用这些线代替它,它对我有用。

data:
  - { idRef: 'header', count: 1 }
  - { idRef: 'data', count: '>1' }
  - { idRef: 'footer', count: 1 }
页眉和页脚中缺少

“count”,这就是抛出异常。希望这会有所帮助。