Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read a string containing a '\' using opencsv?

Tags:

java

opencsv

When I'm reading a csv-file using opencsv it doesn't work properly when encountering a '\' at the end of a string. It makes the " part of the string, instead of the '\' as I want to. I guess there must be some method to add another '\' to have it escape the '\'-character instead? Without having to manually edit the csv-file. I have searched but not found anything.

To clarify my problem, it looks like this:

csv-file

"A",       "B",        "C",       "D"
"value 1", "value 2",  "value 3", "value 4"
"value 5", "value 6\", "value 7", "value 8"

My code looks like this (not really, but it shows my problem):

String inFile = "in.csv";
CSVReader reader = new CSVReader(new FileReader(inFile));
String[] line;

while ((line = reader.readNext()) != null) {
    for (int i = 0; i < line.length(); i++) {
        System.out.println(i + " " + line[i]);
    }
}

I want this to parse into a String[] with 4 elements each, for each row, but the last row parses only into two elements, as shown in the output below.

1 A
2 B
3 C
4 D
1 value 1
2 value 2
3 value 3
4 value 4
1 value 5
2 value 6",value 7,value 8

I have tried to change the reader to:

CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(inFile), "UTF-8"));

but without any luck.

like image 987
Christoffer Karlsson Avatar asked Feb 11 '13 19:02

Christoffer Karlsson


2 Answers

Maybe change the escape character in the constructor of the Reader?

CSVReader(new InputStreamReader(new FileInputStream(inFile)), ',', '"', '|') 

This is assuming | is not used in your CSV file

like image 171
user000001 Avatar answered Oct 28 '22 02:10

user000001


More cleaner and recommended solution is to use RFC4180Parser instead of default CSVParser:

String csv = "come,csv,string";
RFC4180Parser rfc4180Parser = new RFC4180ParserBuilder().build();
CSVReader csvReader = new CSVReaderBuilder(new StringReader(csv)).withCSVParser(rfc4180Parser).build(); 

Reference: https://sourceforge.net/p/opencsv/support-requests/50/

like image 34
vatsal mevada Avatar answered Oct 28 '22 00:10

vatsal mevada