【问题标题】:Sml parsing a csv file? [duplicate]Sml解析csv文件? [复制]
【发布时间】:2013-02-18 16:08:45
【问题描述】:

这些是我定义的函数(内部使用的其他函数已经过测试并且工作正常):

qstring : 接受不包含双引号字符 (") 的字符串。

val qstring : string parser = (many (sat (fn c => not (c = #"\"")))) >>= (fn cs => 
          return (String.implode cs))

sepBy :一个解析器,它接受一个解析器,该解析器将两个解析器作为输入;这 第一个匹配分隔符,第二个匹配 内容。

val sepBy1 = fn s => fn p => p >>= (fn v1 => many (s >>= (fn _ => 
                 p >>= (fn v2 => return v2))) >>= (fn v2 => 
                             return (v1::v2)))

val sepBy = fn s => fn p => (sepBy1 s p) +++ (return [])

val csvline : record parser = sepBy1 (ch #",") field >>= 
                             (fn l => newline >>= (fn _ => return l))

val csvfile : csvfile parser = many csvline

输入示例:

val csvEx = "\"John Smith\",72,1782,\"Colon, Cristobal\"\n198,2,3,4,5,64434,\"two\"\n"

我得到 # 代替应该解析字符串的位置。有什么提示吗?

- parse csvfile csvEx;
val it =
SOME
    ([[String #,Number #,Number #,String #],
     [Number #,Number #,Number #,Number #,Number #,Number #,
     String #]],"") : (csvfile * string) option

【问题讨论】:

  • 另请注意,有一个printLength,用于控制打印列表的长度。以this QA 为例

标签: parsing sml


【解决方案1】:

我想您在这里使用的是 SML/NJ。这只是 NJ 漂亮打印机的一个限制。设置

Control.Print.printDepth := 20  (* or whatever *)

应该举起它。

【讨论】:

    猜你喜欢
    • 2013-02-19
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2011-04-25
    相关资源
    最近更新 更多