Jak czytać i importować plik .csv w groovy na grails. Mam plik .csv z danymi i
trzeba zaimportować do db za pomocą interfejsu użytkownika.Groovy załaduj pliki .csv
Odpowiedz
Zawsze są różne możliwości pracy z plikami CSV w Groovy.
Ponieważ Groovy jest w pełni zgodny z Javą, można użyć jednego z istniejących libararies CSV, np. OpenCSV.
W zależności od złożoności pliku CSV używasz, można także użyć standardowych możliwości obsługi plików/string Groovy:
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 prostu napisał piękny blog post o różne możliwości pracy z plikami CSV w Groovy.
EDIT # 2: Jak Leonard Axelsson recently released version 1.0 swojej biblioteki GroovyCVS, myślałem, że to na pewno dodać do listy opcji.
@Grab ('org.apache.commons: fotografia CSV: 1,2') importu org.apache.commons.csv.CSVParser importu statyczne org.apache.commons.csv. 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 ma przyjemne API i polecam.
Z 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"
}
(Taken from To próbek)
Last resort: Wyrażenie regularne.
Oto jak analizowany plik 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('\\"','"');
Pierwsza metoda kończy się niepowodzeniem z 'groovy.lang.MissingMethodException: Brak sygnatury metody: sun.nio.fs.UnixPath.withReader() ma zastosowanie dla typów argumentów: (myscript $ _run_closure1) wartości: [myscript $ _run_closure1 @ 536f2a7e] ' –
Korzystanie xlson na GroovyCSV:
@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"
}
Pole nazwy zostały zaczerpnięte z nagłówku pliku CSV.
Jeśli plik CSV nie ma nagłówka, można określić nazwy pól programowo.
Przykład wykorzystania opencsv
@Grab ('com.opencsv: opencsv: 4.0') import com.opencsv.CSVReader import com.opencsv.CSVWriter
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. Groovy Podział CSV
- 2. Jak porównać dwa pliki CSV?
- 3. Async Załaduj pliki JavaScript z funkcją oddzwaniania
- 4. pliki Reading csv w zeppelin korzystające z zapłonem CSV
- 5. Nowicjusz przetwarzający pliki CSV w Clojure
- 6. Łączenie 2 pliki .csv przez wspólne kolumny
- 7. Jak odczytywać dziwne pliki CSV w Pandach?
- 8. Załaduj pliki JavaScript w układzie CakePHP na "dole"
- 9. Załaduj pliki skompresowane w elastyczny sposób do elastycznej mapyReduce
- 10. Załaduj pliki źródłowe z pliku JSON w Gulpjs
- 11. Załaduj zdalne pliki JavaScript za pomocą paska adresu
- 12. Załaduj pliki html z nieprzetworzonego folderu w widoku WWW
- 13. Jak analizować duże pliki w Groovy bez przekraczania wielkości sterty?
- 14. Jak mogę połączyć dwa pliki CSV w R?
- 15. Scal pliki CSV w jeden plik bez powtarzających się nagłówków
- 16. read.csv bardzo wolno czyta pliki CSV z dużą liczbą kolumn
- 17. Zapisz każdy arkusz w skoroszycie, aby oddzielić pliki CSV
- 18. Napisz listę data.frames, aby oddzielić pliki CSV z lapply
- 19. Znajdź wszystkie pliki CSV w katalogu przy użyciu Pythona
- 20. maven compile groovy
- 21. Groovy CompileStatic na Androida bałagan Groovy Prawdę
- 22. Załaduj plik csv do biblioteki oleDB i wymuś wszystkie typy danych na łańcuchy znaków
- 23. groovy^operator
- 24. Groovy wykonać polecenie „cp *” shell
- 25. pliki Parse stałej szerokości
- 26. załaduj plik JS w HTML
- 27. Załaduj ponownie sekcja UITableView
- 28. Załaduj ponownie UITableViewController
- 29. Załaduj ponownie atrybut modelu
- 30. Załaduj ikony MultiFrame
ja napisany groovified otacza OpenCSV, który nazywa się GroovyCSV i sprawia, że praca z csv w Groovy jest dużo łatwiejsza i idiomatyczna. Jest dostępny pod adresem http: // xlson.com/groovycsv/ – xlson