Scala RegexParsers - PullRequest
       1

Scala RegexParsers

1 голос
/ 13 января 2012

Я использую следующий объект для разбора CSV.Парсер, кажется, работает правильно, за исключением того, что пробелы удаляются.Может ли кто-нибудь помочь мне понять, где это происходит.Спасибо

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

1 Ответ

5 голосов
/ 13 января 2012

Думаю, я понял это. Необходимо добавить:

override val skipWhitespace = false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...