0

少し問題が発生していて、あなたの助けを求めています! BeanIO 2.1 を使用して固定長ファイルで作業し、現在、次のような構造のレコードを取得しようとしています:28C:5n/5n

  • ':28C:': 修正
  • 5桁(最大)
  • '/' : 修理
  • 5桁(最大)

例:

  • :28C:61/00005
  • :28C:100/00001
  • :28C:12345/12345

コードのスニペットを次に示します。

<record name="statementNumber" class="com.batch.records.StatementNumber" occurs="1">
    <field name="tag" type="string" length="5" rid="true" literal=":28C:" ignore="true" />
    <field name="statementNr" type="int" length="unbounded" maxLength="5" />
    <field name="separator" type="string" length="1" rid="true" literal="/" ignore="true" />
    <field name="sequenceNr" type="int" length="unbounded" maxLength="5" />
</record>

パーサーを実行すると、次の例外が発生します。

Cannot determine field position, field is preceded by another component with indeterminate occurrencesor unbounded length 

私の質問は、フィールド「/」が実際には2つの変数フィールド間の区切り文字であることをBeanIOにどのように伝えることができますか?

前もって感謝します

4

1 に答える 1

1

無制限の長さのフィールドを 1 行に 1 つだけ持つことができます。BeanIO のドキュメントには次のように書かれています。

固定長レコードの最後のフィールドの長さを unbounded に設定すると、パディングが無効になり、固定長レコードの最後に単一の可変長フィールドができるようになります。

正直なところ、これが BeanIO を使用して実行できるかどうかはわかりません。BeanIO の代わりに、5n/5nフィールドを完全に 1 つのフィールドとして Javaに読み込み、コード内で分割するオプションはありますか?/

于 2015-04-02T12:44:35.393 に答える