[ 
https://issues.apache.org/jira/browse/CSV-218?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17424452#comment-17424452
 ] 

Rick Oosterholt commented on CSV-218:
-------------------------------------

I'm running into a similar issue; when an invalid character is located inside a 
record, the same thing happens.
Imagine:

id,firstName
1,"Ahmed"
2,"Sara"
3,"Ali""
4,"Sama"
5,"Khaled"
6,"Ghada"

 

so an unescaped  quote on line 3 (correct line would be: 3,"Ali""")
I'm also searching for a solution to only skip line 3 in cases like this and 
continue to the next.

Did you find a solution already?

> CSVParser's iterator's hasNext throws IOException
> -------------------------------------------------
>
>                 Key: CSV-218
>                 URL: https://issues.apache.org/jira/browse/CSV-218
>             Project: Commons CSV
>          Issue Type: Bug
>          Components: Parser
>    Affects Versions: 1.5
>            Reporter: Max van den Aker
>            Priority: Minor
>             Fix For: Patch Needed, Discussion
>
>
> Method hasNext() of the CSVParser iterator throws an IOException if the next 
> entry in the CSV file contains a malformed record. IMHO, it's preferable that 
> hasNext() merely indicates whether or not a next entry is available. (Method 
> next() will then throw the exception if the record is malformed. This way 
> it's easier to continue parsing after encountering a malformed record.)
> {code:java}
> import java.io.FileReader;
> import java.io.IOException;
> import java.util.ArrayList;
> import java.util.List;
> import java.util.Iterator;
> import org.apache.commons.csv.CSVFormat;
> import org.apache.commons.csv.CSVParser;
> import org.apache.commons.csv.CSVRecord;
> public class CSVFileReader {
>     private static final String [] FILE_HEADER_MAPPING = {"id","firstName"};
>     private static final String STUDENT_ID = "id";
>     private static final String STUDENT_FNAME = "firstName";
>     
>     public static void read(String fileName) {
>         FileReader fileReader = null;
>         CSVParser csvFileParser = null;
>         
>         CSVFormat csvFileFormat = CSVFormat.RFC4180.
>                 withDelimiter(',').
>                 withQuote('"').
>                 withRecordSeparator("\r\n").
>                 withIgnoreEmptyLines(true).
>                 withAllowMissingColumnNames(false).
>                 withFirstRecordAsHeader();
>         try {
>             fileReader = new FileReader(fileName);
>             csvFileParser = csvFileFormat.parse(fileReader);
>         } catch (Exception e) { 
>             e.printStackTrace();
>         }
>         Iterator<CSVRecord> iter = csvFileParser.iterator();
>         try {
>             while(iter.hasNext()) {
>                 try {
>                     CSVRecord record = iter.next();
>                     System.out.println(record.get(STUDENT_ID) + " " + 
> record.get(STUDENT_FNAME));
>                 } catch (Exception e) {
>                     //e.printStackTrace();
>                 }
>             }
>         } catch (Exception e) {
>             System.out.println("iter.hasNext() exception");
>         }
>         try {
>             fileReader.close();
>             csvFileParser.close();
>         } catch (Exception e) {
>             //e.printStackTrace();
>         }
>     }
>     public static void main(String[] args) {
>         CSVFileReader.read("./malformed.csv");
>     }
> }
> {code}
> CSV sample, with entry no. 3 malformed (malformed.csv):
> id,firstName
> 1,"Ahmed"
> 2,"Sara"
> 3,"Ali
> 4,"Sama"
> 5,"Khaled"
> 6,"Ghada"



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to