如何使用 Beanio 按行过滤读取 CSV 文件?
How read CSV file filtering by line with Beanio?
我想用 BeanIO 读取 CSV 文件,我只希望以“CA”开头的行跳过其余行。我需要“CA”行的值“0”“1”“2”和“3”“4”“5”
AA123
BA456
CA789
CA012
CA345
DA678
EA901
BeanIO 有一个 XML 映射器。
<stream name="InfoCSV" format="csv">
<record name="info" class="com.example.Info" minOccurs="0" maxOccurs="unbounded">
<field name="digit1" />
<field name="digit2" />
<field name="digit3" />
</record>
</stream>
如何过滤行?我不知道 XML 解析器
是怎么做的
首先,根据您显示的数据,您必须使用 fixedlength
格式解析器而不是 csv
:
<stream name="InfoCSV" format="fixedlength" />
Appendix A par 7 Streams 有一个名为 ignoreUnidentifiedRecords
的配置设置,您需要忽略不以“CA”开头的 records/lines。
您还需要告诉解析器如何识别您感兴趣的 record/lines。Section 4.2.1 解释记录识别如何与 rid="true"
和 literal
属性一起使用.如果我们假设前 2 个字符标识您感兴趣的 record/line,我们有:
<field name="id" position="0" length="2" rid="true" literal="CA" />
综合起来:
<stream name="InfoCSV" format="fixedlength" ignoreUnidentifiedRecords="true">
<record name="info" class="com.example.Info" minOccurs="0" maxOccurs="unbounded">
<field name="id" position="0" length="2" rid="true" literal="CA"/>
<field name="digit1" position="2" length="1" />
<field name="digit2" position="3" length="1" />
<field name="digit3" position="4" length="1" />
</record>
</stream>
我想用 BeanIO 读取 CSV 文件,我只希望以“CA”开头的行跳过其余行。我需要“CA”行的值“0”“1”“2”和“3”“4”“5”
AA123
BA456
CA789
CA012
CA345
DA678
EA901
BeanIO 有一个 XML 映射器。
<stream name="InfoCSV" format="csv">
<record name="info" class="com.example.Info" minOccurs="0" maxOccurs="unbounded">
<field name="digit1" />
<field name="digit2" />
<field name="digit3" />
</record>
</stream>
如何过滤行?我不知道 XML 解析器
是怎么做的首先,根据您显示的数据,您必须使用 fixedlength
格式解析器而不是 csv
:
<stream name="InfoCSV" format="fixedlength" />
Appendix A par 7 Streams 有一个名为 ignoreUnidentifiedRecords
的配置设置,您需要忽略不以“CA”开头的 records/lines。
您还需要告诉解析器如何识别您感兴趣的 record/lines。Section 4.2.1 解释记录识别如何与 rid="true"
和 literal
属性一起使用.如果我们假设前 2 个字符标识您感兴趣的 record/line,我们有:
<field name="id" position="0" length="2" rid="true" literal="CA" />
综合起来:
<stream name="InfoCSV" format="fixedlength" ignoreUnidentifiedRecords="true">
<record name="info" class="com.example.Info" minOccurs="0" maxOccurs="unbounded">
<field name="id" position="0" length="2" rid="true" literal="CA"/>
<field name="digit1" position="2" length="1" />
<field name="digit2" position="3" length="1" />
<field name="digit3" position="4" length="1" />
</record>
</stream>