【CSII-PE】常用批量文件解析配置说明

文件解析配置
在项目中实际开发中,经常在批处理模块生成或解析不同格式的文件,下面简单介绍下不同格式文件的解析配置


【案例一】行尾没有结束符号
文件格式:业务编号|交易日期|姓名|账号|交易金额|交易状态|交易结果
解析配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Group SYSTEM "packetutf8.dtd">
<segment>
     <idxField name="List">
        <var type="FUNIX">
            <segment>
                <varString name="BizNo" type="D|"  encoding="UTF-8"/><!-- 业务编号 -->
                <varString name="TransDate" type="D|"  encoding="UTF-8"/><!-- 交易时间 -->
                <varString name="Name" type="D|"  encoding="UTF-8"/><!-- 客户姓名-->
                <varString name="PayerAcNo" type="D|"  encoding="UTF-8"/><!-- 银行卡号 -->
                <varString name="Amount" type="D|"  encoding="UTF-8"/><!-- 交易金额 -->
                <varString name="Status" type="D|"  encoding="UTF-8"/><!-- 批扣结果-->
                <String name="Message" defaultValue=""  encoding="UTF-8"/><!-- 备注 -->
            </segment>
        </var>
    </idxField>
</segment>

【案例二】行尾有结束符号
文件格式:业务编号|交易日期|姓名|账号|交易金额|交易状态|交易结果|
解析配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Group SYSTEM "packetutf8.dtd">
<segment>
     <idxField name="List">
        <var type="FUNIX">
            <segment>
                <varString name="BizNo" type="D|"  encoding="UTF-8"/><!-- 业务编号 -->
                <varString name="TransDate" type="D|"  encoding="UTF-8"/><!-- 交易时间 -->
                <varString name="Name" type="D|"  encoding="UTF-8"/><!-- 客户姓名-->
                <varString name="PayerAcNo" type="D|"  encoding="UTF-8"/><!-- 银行卡号 -->
                <varString name="Amount" type="D|"  encoding="UTF-8"/><!-- 交易金额 -->
                <varString name="Status" type="D|"  encoding="UTF-8"/><!-- 批扣结果-->
                <varString name="Message" type="D|"  encoding="UTF-8"/><!-- 备注 -->
            </segment>
        </var>
    </idxField>
</segment>

【案例三】文件分割符号自定义,比如分隔符为<f>
业务编号<f>交易日期<f>姓名<f>账号<f>交易金额<f>交易状态<f>交易结果<f>
解析配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Group SYSTEM "packetutf8.dtd">
<segment>
     <idxField name="List">
        <var type="FUNIX">
            <segment>
                <varString name="BizNo" type="D0x3c"  encoding="UTF-8"/><!-- 业务编号 -->
                <varString name="" type="Df"  encoding="UTF-8"/>
                <varString name="" type="D0x3E"  encoding="UTF-8"/>
                <varString name="TransDate" type="D0x3c"  encoding="UTF-8"/><!-- 交易时间 -->
                <varString name="" type="Df"  encoding="UTF-8"/>
                <varString name="" type="D0x3E"  encoding="UTF-8"/>
                <varString name="Name" type="D0x3c"  encoding="UTF-8"/><!-- 客户姓名-->
                <varString name="PayerAcNo" type="D0x3c"  encoding="UTF-8"/><!-- 银行卡号 -->
                <varString name="" type="Df"  encoding="UTF-8"/>
                <varString name="" type="D0x3E"  encoding="UTF-8"/>
                <varString name="Amount" type="D0x3c"  encoding="UTF-8"/><!-- 交易金额 -->
                <varString name="" type="Df"  encoding="UTF-8"/>
                <varString name="" type="D0x3E"  encoding="UTF-8"/>
                <varString name="Status" type="D0x3c"  encoding="UTF-8"/><!-- 批扣结果-->
                <varString name="" type="Df"  encoding="UTF-8"/>
                <varString name="" type="D0x3E"  encoding="UTF-8"/>
                <varString name="Message" type="D0x3c"  encoding="UTF-8"/><!-- 备注 -->
                <varString name="" type="Df"  encoding="UTF-8"/>
                <varString name="" type="D0x3E"  encoding="UTF-8"/>
            </segment>
        </var>
    </idxField>
</segment>

分隔符一般都用16进制ASCII码表示,例如$:D0x24,  <:D0x3c ASCII码详细如下图


【案例四】超过1000条记录,解析后的数据自动截断,只保留一千条
我们经常遇到这种情况,批量文件记录数大于1000条,解析后取list数据时发现只能拿到1000条记录,可增加maxLoop属性控制

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Group SYSTEM "packetutf8.dtd">
<segment>
     <idxField name="List" ignoreException="true" maxLoop="50000">
        <var type="FUNIX">
            <segment>
                <varString name="BizNo" type="D|"  encoding="UTF-8"/><!-- 业务编号 -->
                <varString name="TransDate" type="D|"  encoding="UTF-8"/><!-- 交易时间 -->
                <varString name="Name" type="D|"  encoding="UTF-8"/><!-- 客户姓名-->
                <varString name="PayerAcNo" type="D|"  encoding="UTF-8"/><!-- 银行卡号 -->
                <varString name="Amount" type="D|"  encoding="UTF-8"/><!-- 交易金额 -->
                <varString name="Status" type="D|"  encoding="UTF-8"/><!-- 批扣结果-->
                <String name="Message" defaultValue=""  encoding="UTF-8"/><!-- 备注 -->
            </segment>
        </var>
    </idxField>
</segment>

by CSII@王大仙

阅读更多

更多精彩内容