2013-03-10 41 views
2

我是一个几乎完整的OCaml新手,但有一些功能编程知识。 我正在寻找在两种规格模式之间转换的概念性方法。OCaml中的文件转换

1 2 “TAU1”
1 3 “H1”
2 1 “H1”

1 TAU1:2,H1:3;
2 h1:1;

这些文件通常要大得多。 我想我可以使用记录类型并读取输入文件行中的行, 然后写入其他文件。 但是有没有更好的方法? 像使用Ocamlyacc或类似的解析和转换? 还是别的?

回答

5

这一切都取决于你目前和未来的需求。

学习分析工具,如果你认为你有机会重用这些知识。

另一方面,您需要解析的文件格式看起来很简单,所以如果格式不会发展,那么手动将专用解析器写入此格式会更快。

+1

正是我要说的!事实上,除非这主要是一个OCaml学习练习(这将很棒),您可以在一行或两行awk或python中执行此操作。 – 2013-03-10 19:20:17

+0

这实际上是一个学习练习(这就是为什么我选择OCaml)和我需要的东西。我想我应该遵循你的建议并使用awk或python,然后在有更多时间的时候在OCaml中尝试它。我想我现在应该学习awk。谢谢。 – user2154457 2013-03-11 07:27:59

0

你的数据看起来很简单,所以Scanf.fscanf可以解析每一行。下面的代码读取一行并给出值的元组。

let ic = open_in "data.txt" in 
    Scanf.fscanf "%d %d %s\n" (fun index value key -> (index, value, key)) 

格式规范类似于C的scanf。如果要删除key中的双引号,请将"%s"替换为"\"%[0-9a-aZ-Z]\""

仍然有内存不足的问题,但解决方案可能在您的脑海。