Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
The Excel strategy is defined as follows.
public static CSVStrategy EXCEL_STRATEGY = new CSVStrategy(',', '"', COMMENTS_DISABLED, ESCAPE_DISABLED, false, false, false, false);
However, when I do a "Save as" in Excel the separator used is actually ';'. Thus, parsing the CSV file as suggested in the JavaDoc of CSVParser fails.
String[][] data = (new CSVParser(new StringReader("a;b\nc;d"), CSVStrategy.EXCEL_STRATEGY)).getAllValues();
Simple test to reproduce:
import java.io.IOException; import java.io.StringReader; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVStrategy; public class CSVExcelStrategyBug { public static void main(final String[] args) { try { System.out.println("Using ;"); parse("a;b\nc;d"); System.out.println(); System.out.println("Using ,"); parse("a,b\nc,d"); } catch (final IOException e) { e.printStackTrace(); } } private static void parse(final String input) throws IOException { final String[][] data = (new CSVParser(new StringReader(input), CSVStrategy.EXCEL_STRATEGY)).getAllValues(); for (final String[] row : data) { System.out.print("["); for (final String cell : row) { System.out.print("(" + cell + ")"); } System.out.println("]"); } } }
Actual output:
Using ; [(a;b)] [(c;d)] Using , [(a)(b)] [(c)(d)]
Expected output:
Using ; [(a)(b)] [(c)(d)] Using , [(a,b)] [(c,d)]