这些是我定义的函数(内部使用的其他函数都经过测试,它们工作正常):
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
答案 0 :(得分:1)
我想你在这里使用SML / NJ。这只是新泽西州漂亮的打印机的限制。设置
Control.Print.printDepth := 20 (* or whatever *)
应解除它。