相关疑难解决方法(0)

使用Scala解析器组合器来解析CSV文件

我正在尝试使用Scala解析器组合器编写CSV解析器.语法基于RFC4180.我想出了以下代码.它几乎可以工作,但我不能让它正确地分隔不同的记录.我错过了什么?

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

  def file: Parser[List[List[String]]] = ((record~((CRLF~>record)*))<~(CRLF?)) ^^ { 
    case r~rs => r::rs
  }
  def record: Parser[List[String]] = (field~((COMMA~>field)*)) ^^ {
    case f~fs => f::fs
  }
  def field: Parser[String] = escaped|nonescaped
  def escaped: Parser[String] = (DQUOTE~>((TXT|COMMA|CR|LF|DQUOTE2)*)<~DQUOTE) ^^ { case …
Run Code Online (Sandbox Code Playgroud)

csv parsing scala parser-combinators

38
推荐指数
2
解决办法
1万
查看次数

什么是简单的(仅限Scala)方式读入然后写出一个通过List [List [String]]的小.csv文件?

我刚刚收到了一堆CSV(逗号分隔值)格式的杂乱数据文件.我需要对数据集进行一些正常的清理,验证和过滤工作.我将在Scala(2.11.7)中进行清理.

在我寻找两个方向的解决方案,输入解析和输出组合时,我发现大多数不明智的切线,包括来自" Scala Cookbook "的切线,在输入解析方面.而且大多数人专注于非常错误的解决方案"使用String.split(",")"以获得CSV线作为List[String].我在作曲输出方面几乎找不到任何东西.

什么样的漂亮的简单的Scala代码片段存在这很容易做到上述CSV往返? 我想避免导入整个库只是为了获取这两个函数(目前我的业务需求使用Java库不是一个可接受的选项).

csv parsing scala

6
推荐指数
1
解决办法
2511
查看次数

标签 统计

csv ×2

parsing ×2

scala ×2

parser-combinators ×1