import scala.collection.mutable.ListBuffer
def parseCSV(s:String):Array[Array[String]] = {
def split(s:String, c:String) = {
val buf = new ListBuffer[String]
val result = new ListBuffer[String]
s.split(c).foreach(p => p.filter(_ =='"').length%2 match{
case 0 if buf.isEmpty => result += p
case 0 if !buf.isEmpty => buf += p
case 1 if buf.isEmpty => buf += p
case 1 if !buf.isEmpty =>
buf += p
result += buf.mkString(c)
buf.clear
})
result
}
split(s,"\n").map(line => {
split(line, ",").map(col => {
col.replaceAll("\"\"", "\"").replaceAll("^(\")", "")
.replaceAll("(\")$", "")
}).toArray
}).toArray
}
val data = """"aaa","b
bb","ccc",zzz,"y""Y""y",xxx"""
parseCSV(data).foreach(line => {
(1 to line.length).foreach(i => {
println(i + " => " + line(i-1))
})
})
yuin
#1526()
[
Scala
]
Rating1/1=1.00
import scala.collection.mutable.ListBuffer def parseCSV(s:String):Array[Array[String]] = { def split(s:String, c:String) = { val buf = new ListBuffer[String] val result = new ListBuffer[String] s.split(c).foreach(p => p.filter(_ =='"').length%2 match{ case 0 if buf.isEmpty => result += p case 0 if !buf.isEmpty => buf += p case 1 if buf.isEmpty => buf += p case 1 if !buf.isEmpty => buf += p result += buf.mkString(c) buf.clear }) result } split(s,"\n").map(line => { split(line, ",").map(col => { col.replaceAll("\"\"", "\"").replaceAll("^(\")", "") .replaceAll("(\")$", "") }).toArray }).toArray } val data = """"aaa","b bb","ccc",zzz,"y""Y""y",xxx""" parseCSV(data).foreach(line => { (1 to line.length).foreach(i => { println(i + " => " + line(i-1)) }) })Rating1/1=1.00-0+
[ reply ]