1

从 apache 使用 camel-beanio 时如何跳过 CSV 标题行?

我用于映射的 XML 文件如下所示:

<beanio>
<record name="myRecord" class="my.package.MyConditionClass">
 <field name="myField" position="1" />
 <field name="mylist" position="2" collection="list" type ="string"/>
 <segment name="conditions" class="my.package.MyConditionClass" nillable="true" collection="map" key="myKey">
 <field name="myKey" position="2">
 <field name="myValue" position="3">
</segment>
</record>
</beanio>

但要让我的代码运行,我必须手动删除第一行(标题行)。如何自动跳过标题行?

4

2 回答 2

1

要读取 CSV 文件并忽略第一个标题行,您可以将标题的第一个字段值定义commentsCSV Stream

CSV 示例:

toto;tata;titi
product1;1;18
product2;2;36
product3;5;102

映射文件:

<beanio ...
    <stream name="dataStream" format="csv" >
        <parser>
            <property name="delimiter" value=";" />
            <!-- ignore header line -->
            <property name="comments" value="toto" /> 
        </parser>
        <record name="record" minOccurs="0" maxOccurs="unbounded" class="com.stackoverflow.Product" />
    </stream>
</beanio>

来源http ://beanio.org/2.0/docs/reference/index.html#CSVStreamFormat

另一种方法是使用新选项camel-bindy代替(请参阅https://camel.apache.org/components/latest/bindy-dataformat.html#_1_csvrecordcamel-beanioskipFirstLine

于 2019-11-14T15:20:59.553 回答
0

捷径:

一旦定义 BeanReader 来读取/处理记录,就使用它的 skip 方法和 count 1 来跳过标题。

e.g.
   //  Define Reader to process records
   BeanReader beanReader = factory.createReader("STREAM",inputStreamReader);

   // Skip First Record
   beanReader.skip(1);

   // Process rest of Stream
   Object record;
   do {
      try {
          record = beanReader.read();
      }
      catch (BeanReaderException e) {
         e.printStackTrace();
      }
   } while(record !=null)

请参阅http://beanio.org/2.0/docs/reference/index.html#TheMappingFile。跳过方法签名:

 public int skip(int count) throws BeanReaderException;  
于 2021-03-27T09:27:36.703 回答