Cadena, división (",") no es probable que funcione.
Dividirá los campos que tienen comas incrustadas ("Foo, Inc.") aunque sean un solo campo en la línea CSV.
¿Y si el nombre de la empresa es:
Company, Inc.
o peor:
Joe "bueno, rápido y barato" Comida
Según Wikipedia: (http://en.wikipedia.org/wiki/Comma-separated_values)
Los campos con comas incrustadas deberá estar entre comillas dobles.
1997,Ford,E350,"Super, luxurious truck"
campos con comillas dobles incrustadas debe ser encerrado dentro de comillas dobles, y cada uno de los caracteres de doble cita incrustados debe ser representado por un par de comillas dobles.
1997,Ford,E350,"Super ""luxurious"" truck"
Peor aún, los campos citados pueden haber encajado saltos de línea (saltos de línea; "\ n"):
Campos con saltos de línea interno debe estar encerrados dentro de comillas dobles.
1997,Ford,E350,"Go get one now
they are going fast"
Esto demuestra el problema con String, split ("") comas análisis sintáctico:
La línea CSV es:
a, b, c, "Company, Inc.", d, e, "Joe's" "Bueno, rápido y barato" "Comida", f, 11/10/2010,1/1/2011, g, h, i
// Test String.split(",") against CSV with
// embedded commas and embedded double-quotes in
// quoted text strings:
//
// Company names are:
// Company, Inc.
// Joe's "Good, Fast, and Cheap" Food
//
// Which should be formatted in a CSV file as:
// "Company, Inc."
// "Joe's ""Good, Fast, and Cheap"" Food"
//
//
public class TestSplit {
public static void TestSplit(String s, String splitchar) {
String[] split_s = s.split(splitchar);
for (String seg : split_s) {
System.out.println(seg);
}
}
public static void main(String[] args) {
String csvLine = "a,b,c,\"Company, Inc.\", d,"
+ " e,\"Joe's \"\"Good, Fast,"
+ " and Cheap\"\" Food\", f,"
+ " 10/11/2010,1/1/2011, h, i";
System.out.println("CSV line is:\n" + csvLine + "\n\n");
TestSplit(csvLine, ",");
}
}
produce los siguientes:
D:\projects\TestSplit>javac TestSplit.java
D:\projects\TestSplit>java TestSplit
CSV line is:
a,b,c,"Company, Inc.", d, e,"Joe's ""Good, Fast, and Cheap"" Food", f, 10/11/2010,1/1/2011, g, h, i
a
b
c
"Company
Inc."
d
e
"Joe's ""Good
Fast
and Cheap"" Food"
f
10/11/2010
1/1/2011
g
h
i
D:\projects\TestSplit>
Dónde esa línea CSV debe ser analizada como:
a
b
c
"Company, Inc."
d
e
"Joe's ""Good, Fast, and Cheap"" Food"
f
10/11/2010
1/1/2011
g
h
i
no es una situación tan extraña como se podría pensar :) –
Bibliotecas como [OpenCSV] (http://opencsv.sourceforge.net/) manejan todos los casos extraños para archivos CSV (líneas nuevas, delimitación, etc.). – Joshua
Aunque no se presentan casos "extraños", el uso de una biblioteca (1) reducirá la posibilidad de errores en el análisis sintáctico; (2) proporcionar más características; (3) producir una solución extensible; y (4) integra fácilmente el análisis de futuros archivos CSV (si es necesario). –