2017-08-07 4 views
0

次の形式の固定長ファイルがあります。リテラルを削除せずにマーシャリング詳細レコード

X - ヘッダー

Y - 予告編

データレコードは、最初の文字としてリテラル任意の識別子を持っていません。

サンプルデータ:

X10506505 
RANDOM00 DATA1 
RANDOM00 DATA2 
Y0000001 

ヘッダーレコードが細かい解析されます。

問題:詳細レコードに一意の識別子がないため、トレーラレコードが詳細レコードにマップされています。

トレーラーレコードとディテールレコードを区別するにはどうすればよいですか?

+0

詳細レコードが「X」または「Y」で始まる確率はいくらですか? – nicoschl

+0

トレーラーとヘッダーレコードがX/Yで始まる確率は100%です。 – Purus

+0

ヘッダーで始まっていないものとトレーラーIDが詳細レコード。申し訳ありませんが、それ以外には実際に詳細レコードを特定する方法はありません。 – nicoschl

答えて

0

次のmapping.xmlファイルは私のために働きます。複数のフィールドでridを使用していることがわかります。これにより、BeanIOは正しいレコードを識別するために、より多くのデータをオンラインで使用します。

<stream name="dummy" format="fixedlength" minOccurs="1" maxOccurs="1" > 
    <group name="myFile" class="com.company.project.File" > 
    <record name="header" class="com.company.project.Header" minOccurs="1" maxOccurs="1"> 
     <field name="id" rid="true" length="1" required="true" literal="X" /> 
     <field name="h1" rid="true" length="8" required="true" regex=".{8}" /> 
     <field name="h2" length="4" required="false" minOccurs="0"/> 
    </record> 
    <record name="detailRecords" class="com.company.project.Detail" minOccurs="1" maxOccurs="unbounded" collection="collection"> 
     <field name="d1" rid="true" length="9" required="true" regex=".{8,9}" /> 
     <field name="d2" rid="true" length="5" required="true" regex=".{5}" /> 
     <field name="d3" length="5" required="false" minOccurs="0"/> 
    </record> 
    <record name="trailer" class="com.company.project.Trailer" minOccurs="1" maxOccurs="1"> 
     <field name="id" rid="true" length="1" required="true" literal="Y" /> 
     <field name="tValue" rid="true" length="7" required="true" regex=".{7}" /> 
    </record> 
    </group> 
</stream> 

これがうまく行かない場合は、データの具体的な詳細と可能であれば実際のデータが必要です。

試験1:

X10506505 
RANDOM00 DATA1 
RANDOM00 DATA2 
Y0000001 

出力:

Header: id='X', h1='10506505' 
Detail: d1='RANDOM00', d2='DATA1' 
Detail: d1='RANDOM00', d2='DATA2' 
Trailer: id='Y', tValue='0000001' 

試験2:

X10506505 
RANDOM00 DATA1 
RANDOM00 DATA2 
XANDOM00 DATA3 
YANDOM00 DATA4 
Y0000001 

出力:

Header: id='X', h1='10506505' 
Detail: d1='RANDOM00', d2='DATA1' 
Detail: d1='RANDOM00', d2='DATA2' 
Detail: d1='XANDOM00', d2='DATA3' 
Detail: d1='YANDOM00', d2='DATA4' 
Trailer: id='Y', tValue='0000001' 

おかげでまた彼の助けのための同僚(マルコム・マクリーン)に行かなければなりません。

関連する問題