我是一个几乎完整的 OCaml 新手,但有一些函数式编程知识。我正在寻找一种在两种规范模式之间进行转换的概念方法。
1 2 “tau1”
1 3 “h1”
2 1 “h1”
进入
1 tau1:2,h1:3;
2 h1:1;
这些文件通常要大得多。我想我可以使用记录类型并逐行读取输入文件,然后写入另一个文件。但是有没有更好的方法?喜欢使用 Ocamlyacc 或类似的东西进行解析和转换?还是别的什么?
我是一个几乎完整的 OCaml 新手,但有一些函数式编程知识。我正在寻找一种在两种规范模式之间进行转换的概念方法。
1 2 “tau1”
1 3 “h1”
2 1 “h1”
进入
1 tau1:2,h1:3;
2 h1:1;
这些文件通常要大得多。我想我可以使用记录类型并逐行读取输入文件,然后写入另一个文件。但是有没有更好的方法?喜欢使用 Ocamlyacc 或类似的东西进行解析和转换?还是别的什么?
这一切都取决于您当前和未来的需求。
如果您认为您将有机会重用这些知识,请学习解析工具。
另一方面,您需要解析的文件格式似乎很简单,因此如果格式不发展,手动编写专门的解析器来处理这种格式会更快。
您的数据看起来很简单,因此Scanf.fscanf
可以解析一行。下面的代码读取一行并给出值的元组。
let ic = open_in "data.txt" in
Scanf.fscanf "%d %d %s\n" (fun index value key -> (index, value, key))
格式规范类似于 C 的scanf
. 如果要删除 in 中的双引号key
,请替换"%s"
into "\"%[0-9a-aZ-Z]\""
。
仍然存在内存不足的问题,但解决方案可能在您的脑海中。