2012-01-13 10 views
1

私は次のオブジェクトを使用してcsvを解析しています。パーサは、スペースが取り除かれていることを除いて正しく動作しているようです。誰かが私がどこでそれが起こっているのか理解する手助けをすることができますか?ありがとうScala RegexParsers

object CsvParser extends RegexParsers { 
    override protected val whiteSpace = """[ \t]""".r 

    def COMMA = "," 
    def DQUOTE = "\"" 
    def DQUOTE2 = "\"\"" ^^ { case _ => "\"" } 
    def CR = "\r" 
    def LF = "\n" 
    def CRLF = "\r\n" 
    def TXT = "[^\",\r\n]".r 

    def record: Parser[List[String]] = rep1sep(field, COMMA) 
    def field: Parser[String] = (escaped | nonescaped) 
    def escaped: Parser[String] = (DQUOTE ~> ((TXT | COMMA | CR | LF | DQUOTE2)*) <~ DQUOTE) ^^ { case ls => ls.mkString("") } 
    def nonescaped: Parser[String] = (TXT*) ^^ { case ls => ls.mkString("") } 

    def parse(s: String) = parseAll(record, s) match { 
    case Success(res, _) => res 
    case _ => List[List[String]]() 
    } 
} 

答えて

5

私はそれを考え出しました。追加する必要があります:

override val skipWhitespace = false