複数の繰り返しセグメントを含む固定長ファイルのマッピング ファイルを作成しようとしています。問題は、これらのセグメントの複数が無期限に繰り返されることです。これは、フラット ファイルの beanio ではサポートされていません。これには正当な理由があることを理解しています. beanio は、セグメントが繰り返される頻度について推測するしかないからです.
ただし、各セグメントの繰り返し回数はファイル内の繰り返しセグメントが発生する前の位置に存在するため、ストリームからその数を読み取り、「minOccurs」にデータを入力する方法があるかどうかを調べようとしています。正しい値を持つ次のセグメントの「maxOccurs」プロパティ。基本的に私のマッピングファイルは次のようになります:
<beanio>
<stream name="employeeFile" format="fixedlength">
<record name="record1" class="example.Record1">
<field name="field1" length="10"/>
<field name="field2" length="2"/>
<field name="length1" length="2"/>
<segment name="list1" collection="list" minOccurs="1" maxOccurs="unbounded" class="example.List1">
...
</segment>
<field name="length2" length="2"/>
<segment name="list2" collection="list" minOccurs="1" maxOccurs="unbounded" class="example.List2">
...
</segment>
</record>
</stream>
</beanio>
フィールド length1 と length2 の値をセグメントの "maxOccurs" プロパティとして使用する方法が必要です。この動作を実現する「公式の」方法がないことはかなり確信していますが、これまでのところ、リモートでエレガントな解決策を思いつくことができませんでした。
私が持っていたアイデアは、ファイルから各セグメントの繰り返し回数をロードし、マッピング ファイルで検索置換を実行してから、これを beanio にロードする手順を作成することでしたが、これは非常に複雑な方法のように思えます。 .
ありがとう、ゾンケ