2015-04-08 26 views
5

Próbuję parsować plik CSV za pomocą FlatFileItemReader. Ten plik CSV zawiera kilka cytowanych znaków nowej linii, jak pokazano poniżej.Odczyt wierszy w pliku CSV, które są cytowane w pliku w FlatfileItemReader z wiosennej partii

email, name 
[email protected], "NEW NAME 
ABC" 

Ale to parsowanie się niepowodzeniem z wymaganych pól są 2 ale rzeczywista to 1.

Co mi brakuje w mojej konfiguracji 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> 
+0

[email, nazwa ... "cytowany ..."] doprowadziłaby do 3 wartości, jeśli mogę użyć [e-mail, imię i nazwisko, "coś"] to działa Tak jak się spodziewano, ponieważ ten parametr mówi "ignoruj ​​ogranicznik linii w cudzysłowie", czego oczekujesz? –

+0

@MichaelPralow Chcę przeanalizować powyższy plik CSV. –

+0

Usunięto nieużywaną konfigurację –

Odpowiedz

10

z pudełka, w którym FlatFileItemReader używa SimpleRecordSeparatorPolicy, dla usecase

  • skomentował część idzie na 2 lub więcej linii

trzeba ustawić DefaultRecordSeparatorPolicy

Cytowane ze swojego javadoc:

A RecordSeparatorPolicy, która traktuje wszystkie linie jako zakończenia rekordów, o ile nie zawierają one nieokreślonych cudzysłowów i nie kończą się znacznikiem kontynuacji .

przykład xml konfiguracji

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

Dziękuję bardzo. Czytałem o RecordSeparatorPolicy, ale musiałem pominąć tę część nieskonkretowanych cytatów –