2011-03-09 10 views
6

estoy análisis de un archivo CVS como la siguiente:dividida maravilloso y sin recorte final

"07555555555",25.70,18/11/2010,01/03/2011,N,133,0,36,,896,537,547,,Mr,John,Doe,, 
"07555555555",10.15,26/01/2011,01/03/2011,N,16,0,100,,896,537,547,,Mrs,Jane,Doe,,[email protected] 

La cosa es que cuando se utiliza un script como el siguiente:

file.eachLine{ line -> 

    items = line.split(",") 
    println items.length 
} 

El resultado es el siguiente :

16 
18 

lo que me hace lo que el dividir función elimina una valores finales Necesito que tenga todos los artículos, incluso si están vacíos. ¿Alguna idea?

+2

Puede valer la pena utilizar una biblioteca en lugar de volver a crear la lógica de análisis para csv usted mismo. Sugiero usar opencsv o groovycsv https://github.com/xlson/groovycsv/, un envoltorio maravilloso para opencsv (descargo de responsabilidad: soy el autor de groovycsv). Puede leer más sobre cómo analizar csv en groovy aquí: http://www.kellyrob99.com/blog/2010/07/01/groovy-and-csv-how-to-get-your-data-out/ – xlson

Respuesta

4

creo que quiere hacer:

items = line.split(',', -1) 

para asegurarse de que obtiene todas las fichas

(según the javadoc):

El parámetro de límite controla el número de veces el patrón se aplica y por lo tanto afecta la longitud de la matriz resultante. Si el límite de n es mayor que cero entonces el patrón se aplicará como máximo n - 1 veces, longitud de la matriz no será mayor que n, y la última entrada del array contendrá toda la entrada más allá del último emparejado delimitador. Si n es no positivo, el patrón será aplicado tantas veces como sea posible y la matriz puede tener cualquier longitud. Si n es cero, entonces el patrón se aplicará tantas veces como sea posible, la matriz puede tener cualquier longitud, y las cadenas vacías posteriores se descartarán.

+0

Gracias ¡mucho! –