2010-04-12 32 views
26

Nasıl gradlarda groovy .csv dosya okuyun ve alın. Verilerle birlikte .csv dosyası ve
kullanıcı arayüzünü kullanarak db'ye içe aktarım yapmam gerekiyor.Groovy yükleme .csv dosyaları

cevap

43

Groovy'de CSV dosyalarıyla çalışmak için her zaman farklı olasılıklar vardır.

Groovy, Java ile tam olarak birlikte çalışabilir olduğundan, mevcut CSV libararies'lerinden birini kullanabilirsiniz. OpenCSV.

CSV karmaşıklığına bağlı olarak da Groovy standart dosya/string işleme olanaklarını kullanabilir, kullandığınız dosya:

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] 
) 
} 

DÜZENLEME: Kelly Robinson hemen güzel blog post yazdı Groovy'de CSV dosyaları ile çalışmak için mevcut farklı olasılıklar.

DÜZENLEME # 2: onun GroovyCVS kütüphanenin Leonard Axelsson'un olarak recently released version 1.0, ben kesinlikle seçenekler listesine ekleyin gerektiğini düşündüm. Apache Commons-CSV ile

+2

Ben groovified yazdım GroovyCSV adlı OpenCSV etrafındaki sarıcı ve Groovy'de csv ile çalışmayı çok daha kolay ve idiomatik hale getiriyor. Http: // xlson adresinden ulaşılabilir.com/groovycsv/ – xlson

0

:

@Grab ('org.apache.commons: commons-csv: 1.2') ithalat org.apache.commons.csv.CSVParser ithalat statik 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'nin iyi bir API'si var ve bunu öneririm. GroovyCSV ile


:

@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" 
} 

('s numunelerden alınan)


Son çare: Düzenli ifade.

İşte might contain a quoted escaped string in it's fourth column bir dosyayı çözümlenen nasıl: Kullanılması

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('\\"','"'); 
+1

İlk yöntem, 'groovy.lang.MissingMethodException ile başarısız: yöntem imzası yok: sun.nio.fs.UnixPath.withReader() argüman türleri için geçerlidir: (myscript $ _run_closure1) değerler: [myscript $ _run_closure1 @ 536f2a7e] ' –

3

xlson en 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" 
} 

isimleri CSV dosyasının başlığında alınır alanı.
CSV dosyasının üstbilgisi yoksa, alan adlarını programsal olarak belirtebilirsiniz. (': Opencsv: com.opencsv 4,0')

@Grab opencsv kullanarak

0

Örnek ithalat com.opencsv.CSVReader ithalat 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() 
    } 
} 
İlgili konular