2017-12-09 8 views
0

Ich bin neu in Scala und Programmierung im Allgemeinen. Wie würde ich eine Liste in eine CSV-Datei mit Scala schreiben?Exportieren von Liste in .csv [Scala]

So habe ich eine Liste von Objekten ...

List[test] = List(test(Group1,lol,1,2,3),test(Group2,lel,4,5,6)....) 

wie würde ich es in eine CSV mit 4 Spalten zu exportieren, und jede Zeile die Attribute eines Objekts zu haben?

Jede Hilfe wird geschätzt.

Antwort

0

ich eine vorhandene Bibliothek empfehlen: https://github.com/melrief/PureCSV
Verwenden SBT für die Lösung der Abhängigkeit: http://www.scala-sbt.org/
Dateien:
* ./build.sbt
* ./OutputCsv.scala

build.sbt

name := "parse-csv" 
version := "1.0.0" 
libraryDependencies ++= Seq("com.github.melrief" %% "purecsv" % "0.1.1") 

OutputCsv.scala

import purecsv.safe._ 

object OutputCsv extends App { 
    case class Test(group: String, message: String, age: Int) 
    val tests = List(Test("Group1", "lol", 1), Test("Group2", "lel", 4)) 

    println(tests.toCSV()) // just for debug purposes 
    tests.writeCSVToFileName("/tmp/example.csv", header=Some(Seq("group", "message", "age"))) 
} 

sbt run die Datei

+0

Das ist tolles Feedback! Ich habe alles geschafft, was du erwähnt hast, außer dem "sbt run" -Teil. Ich benutze IntelliJ hier und wenn ich den Code ausführe, bekomme ich nur 'import purecsv.safe._'' definiertes Modul OutputCsv' Also nehme ich an, dass es nicht läuft –

0

Fall Klassen sind Instanzen von Product ausführen, die eine schöne Art und Weise bietet durch alle Felder als .productIterator iterieren.

Die Idee ist, dass Sie alle Felder in Zeichenfolgen konvertieren, dann Backslashes und doppelte Anführungszeichen fliehen, dann alle zusammen, doppelt zitieren und durch Kommas getrennt, und dann alles mit einer neuen Zeile kleben :

list 
.map { 
    _.productIterator 
    .map(_.toString) 
    .map(_.replaceAll("\\", "\\\\")) 
    .map(_.replaceAll("\"", "\\\"")) 
    .mkString("\"", "\",\"", "\"") 
}.mkString("\n")