Cómo leer e importar archivos .csv en groovy en grial. Tengo un archivo .csv con datos y
necesario para importar en db usando la interfaz de usuario.Groovy load .csv files
Respuesta
Siempre hay diferentes posibilidades de trabajar con archivos CSV en Groovy.
Como Groovy es totalmente interoperable con Java, puede utilizar una de las bibliotecas de CSV existentes, p. OpenCSV.
Dependiendo de la complejidad del archivo CSV que está utilizando, también se pueden utilizar las posibilidades de manejo de archivos/secuencia estándar de maravilloso:
def sql = Sql.newInstance("jdbc:mysql://localhost:3306/mydb",
"user", "pswd", "com.mysql.jdbc.Driver")
def people = sql.dataSet("PERSON")
new File("users.csv").splitEachLine(",") {fields ->
people.add(
first_name: fields[0],
last_name: fields[1],
email: fields[2]
)
}
EDIT: Kelly Robinson acaba de escribir un buen blog post acerca las diferentes posibilidades que están disponibles para trabajar con archivos CSV en Groovy.
editar # 2: Como Leonard Axelsson recently released version 1.0 de su biblioteca GroovyCVS, pensé que definitivamente debo añadir esto a la lista de opciones.
Con Apache Commons-CSV:
@Grab ('org.apache.commons: Commons-CSV: 1.2') importación org.apache.commons.csv.CSVParser importación org.apache.commons.csv estática. CSVFormat. *
@Grab('org.apache.commons:commons-csv:1.2')
import org.apache.commons.csv.CSVParser
import static org.apache.commons.csv.CSVFormat.*
import java.nio.file.Paths
Paths.get('countryInfo.txt').withReader { reader ->
CSVParser csv = new CSVParser(reader, DEFAULT.withHeader())
for (record in csv.iterator()) {
println record.dump()
}
}
Commons-CSV tiene buena API y la recomiendo.
Con GroovyCSV:
@Grab('com.xlson.groovycsv:groovycsv:0.2')
import com.xlson.groovycsv.CsvParser
def csv = '''Name,Lastname
Mark,Andersson
Pete,Hansen'''
def data = new CsvParser().parse(csv)
for(line in data) {
println "$line.Name $line.Lastname"
}
(de ello se disminuirá de muestras)
Último recurso: Expresión regular.
Así es como he analizado sintácticamente un archivo que might contain a quoted escaped string in it's fourth column:
File detailedStatsFile = new File("stats.csv");
detailedStatsFile.eachLine { line, number ->
// Number Of Executions, Total Milliseconds, Milliseconds per execution, "Type"
def match = line =~ /([^,]*?),\s*([^,]*?),\s*([^,]*?),\s*(?:([^",]+)|(?:"((?:[^\\"]++(?:\\")?)++)"))$/; //"
if (!match.matches())
continue;
def numberOfExecs = Integer.valueOf(match.group(1));
def totalMillis = Integer.valueOf(match.group(2));
def detailedStatName = match.group(4);
if (detailedStatName == null)
detailedStatName = match.group(5).replaceAll('\\"','"');
Primer método falla con 'groovy.lang.MissingMethodException: ninguna firma de método: sun.nio.fs.UnixPath.withReader() es aplicable para los tipos de argumento: (myscript $ _run_closure1) values: [myscript $ _run_closure1 @ 536f2a7e] ' –
El uso de GroovyCSV xlson:
@Grab('com.xlson.groovycsv:groovycsv:1.1')
import static com.xlson.groovycsv.CsvParser.parseCsv
for(line in parseCsv(new FileReader('countries.csv'), separator: ';')) {
println "Country=$line.COUNTRY, Capital=$line.CAPITAL"
}
El campo de nombres se toman de la cabecera del archivo CSV.
Si el archivo CSV no tiene encabezado, puede especificar los nombres de campo mediante programación.
Ejemplo utilizando opencsv
@Grab ('com.opencsv: opencsv: 4,0') importación com.opencsv.CSVReader com.opencsv.CSVWriter importación
class TestCsvReader {
static main(args) {
def csv = '''"a","b","c"
"d","e","f"
'''
def Reader csvFileReader = new StringReader(csv)
def Writer csvFileWriter = new PrintWriter(System.out)
def CSVReader reader = new CSVReader(csvFileReader)
def CSVWriter writer = new CSVWriter(csvFileWriter)
reader.iterator().each { fields ->
writer.writeNext(fields)
}
reader.close()
writer.close()
}
}
- 1. Lazy Load, Lazier Load .. Control Fade Speed?
- 2. Tailing Rolling Files
- 3. Django javascript files
- 4. Edición .sol-files
- 5. iOS 4.2 simulator files?
- 6. MSBuild combine files
- 7. wc gzipped files?
- 8. google-files-api
- 9. Flash HTTP Streaming - Multiple Files
- 10. Eclipse import conf .xml files
- 11. Windows Batch Files: if else
- 12. git ls-files con fecha?
- 13. VS2010 .filter files and SVN
- 14. Rails gem with javascript files
- 15. GIt Deployment + Configuration Files + Heroku
- 16. neo4j y max open files
- 17. ¿Cómo procesar las filas de un archivo CSV utilizando Groovy/GPars de manera más eficiente?
- 18. load() método obsoleto?
- 19. OnNavigatedTo vs evento Load
- 20. Spring + Load balanceing/Clustering
- 21. Anulando jQuery(). Load()
- 22. Bootstrap Carousel Lazy Load
- 23. MooTools: domready vs load
- 24. ReSharper sugerencia Load = pageLoad
- 25. Python y Server Load
- 26. PHP Lazy Load Iterator
- 27. Load Testing Software
- 28. Page_Init y Load
- 29. PowerPC Assembly Load Inmediato
- 30. JQuery Script Load Timing
He escrito un groovified envoltura alrededor de OpenCSV que se llama GroovyCSV y hace que trabajar con csv en Groovy sea mucho más fácil e idiomático. Está disponible en http: // xlson.com/groovycsv/ – xlson