0

我正在尝试将 record2 中的“accountNumber”字段的数据作为“属性”访问。文件格式为平面文件(format="fixedlength")。请帮助我。

<beanio xmlns="http://www.beanio.org/2012/03">
    <stream name="Definitions" format="fixedlength">
        <record name="header" order="1" minOccurs="1" maxOccurs="1" class="map">
            <field name="recordType"  literal="HD" position="0" length="2" rid="true"/>
        </record>
        <group name="Sample" order="2" minOccurs="0" maxOccurs="unbounded" class="map">
                <record name="record1" order="1" minOccurs="1" maxOccurs="1"  class="map">
                    <field name="type" rid="true" literal="PP" position="0" length="2"/>
                    <field name="accountNumber" position="2" length="30"/>
                </record>
                <record name="record2" order="2" minOccurs="0" maxOccurs="unbounded" class="map" collection="list" >
                    <field name="type" rid="true" literal="FF" position="0" length="2"/>
            < ******------ I want to access the "accountNumber" here ------****** />
                </record>
        </group>
        <record name="trailer" order="3" >
            <field name="recordType" rid="true" literal="TT" position="0" length="2"/>
        </record>  
    </stream>
</beanio>

样本数据:

HD                                 
PPXXXXXXXXXXXXXXXXXXXXXXXXXXX   
FF                                    
FF                                    
PPYYYYYYYYYYYYYYYYYYYYYYYYYYY                  
FF                                    
FF                                    
TT
4

1 回答 1

0

我认为您必须在阅读所有记录后自己进行组合。这将是可能的,因为来自的信息record1将存在于该Sample组的地图中。您将不得不遍历每个record2并设置来自record1.


我还没有完全实现这一点,但我很快就会实现,这是我使用 spring-batch 的策略:

  • 我不会对我的记录进行分组。
  • 为这两个记录创建不同的类。
  • 使用 bean-io 设置批处理作业ItemReader
  • 将 a 添加ClassifierCompositeItemProcessor到带有 的作业中SubclassClassifier
    • 类型映射将两个记录的类映射到特定的ItemProcessors,
    • 会将该record1 ItemProcessor记录中的信息添加到步骤中ExecutionContext并返回null以避免ItemWriter调用。
  • 将一个添加ItemWriter到将读取ExecutionContext和写入record1与 each的组合的作业中record2

我希望这有帮助。

于 2015-07-17T11:32:52.727 回答