编组详细记录没有脱离文字

问题描述:

我有一个固定长度的文件,格式如下。编组详细记录没有脱离文字

X - 页眉

ý - 挂车

的数据记录不具有文字的第一个字符的任何标识符。

样本数据:

X10506505 
RANDOM00 DATA1 
RANDOM00 DATA2 
Y0000001 

头记录解析罚款。

问题:由于明细记录没有任何唯一标识符,所以尾部记录正在映射到明细记录。

如何区分拖车记录和详细记录?

+0

详细记录以'X'或'Y'开头的概率是多少? – nicoschl

+0

它有一个100%的机会,预告片和标题记录以X/Y开始。 – Purus

+0

我在想,你也许可以用一个正则表达式来表示任何不以标题开头的内容,而且尾标是详细记录。对不起,除此之外,没有真正的方法来识别详细记录。 – nicoschl

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

感谢也必须去为他的帮助同事(马尔科姆·麦克莱恩)。