读取CSV中的换行符,它在Spring批处理的FlatfileItemReader中的文件中引用

时间:2015-04-08 08:00:23

标签: java spring csv spring-batch

我正在尝试使用FlatFileItemReader解析CSV文件。此CSV包含一些带引号的换行符,如下所示。

email, name
abc@z.com, "NEW NAME
 ABC"

但是这个解析失败了,必填字段是2,但实际是1。

我在FlatFileReader配置中缺少什么?

<property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">

                <!-- The lineTokenizer divides individual lines up into units of work -->
                <property name="lineTokenizer">
                    <bean
                        class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">

                        <!-- Names of the CSV columns -->
                        <property name="names"
                            value="email,name" />
                    </bean>
                </property>

                <!-- The fieldSetMapper maps a line in the file to a Product object -->
                <property name="fieldSetMapper">
                    <bean
                        class="com.abc.testme.batchjobs.util.CustomerFieldSetMapper" />
                </property>
            </bean>
        </property>

2 个答案:

答案 0 :(得分:11)

开箱即用的FlatFileItemReader使用SimpleRecordSeparatorPolicy作为您的用例

  • 评论部分超过2行或更多行

您需要设置DefaultRecordSeparatorPolicy

引用其javadoc:

  

RecordSeparatorPolicy,将所有行视为记录结尾,如   只要他们没有未终止的报价,并且不以a。结尾   继续标记。

示例xml配置

<bean id="reader" 
      class="org.springframework.batch.item.file.FlatFileItemReader">
      ...
    <property name="recordSeparatorPolicy">
        <bean class="org.springframework.batch.item.file.separator.DefaultRecordSeparatorPolicy" />
    </property>
      ...
</bean>

答案 1 :(得分:0)

@client.event
async def on_message(message):
    member = message.author
    guild = message.guild
    get_max_lvl_stats(member.id)
    print(f"{member} from guild {guild} said>> '{message.content}'")
    get_xp_stats(member.id)
    get_lvl_stats(member.id)
    if xp_results > maxlvlresult:
        max_lvl_update(2, member.id)
        lvl_update(1, member.id)
    elif xp_results < maxlvlresult:
        xp_update(1, member.id)
    elif xp_results == 0:
        pass
    elif xp_results == maxlvlresult:
        xp_update(1, member.id)
    else:
        print("An error occurred with on_message lvl updating.")
    await client.process_commands(message)