编组详细记录而不删除文字



我有一个固定长度的文件,格式如下。

X - 标题

Y - 拖车

数据记录没有任何标识符文本作为第一个字符。

示例数据:

X10506505
RANDOM00 DATA1
RANDOM00 DATA2
Y0000001

标头记录解析良好。

问题:由于详细记录没有任何唯一标识符,因此拖车记录正在映射到详细记录。

如何区分预告片记录和详细记录?

以下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'

还要感谢同事(马尔科姆·麦克莱恩(的帮助。

最新更新