【发布时间】:2013-11-16 10:56:05
【问题描述】:
我遇到了一种情况,我试图从名称-值对流中构建一个 HDF 复合类型(为简单起见,我们会说一个值可以是双精度数或字符细绳)。为了清楚起见,数字数据已经是二进制的 - 它不是字符串。这些名称提供了结构信息(这是数组的一部分吗?这是嵌套复合类型的一部分吗?)。
我正在想象制作一个标记向量,使用名称信息插入标记(例如,'[' 和 ']' 来分隔数组,'{' 和 '}' 来分隔嵌套化合物),但除此之外使用价值。从文档中我不清楚 Spirit 二进制解析器是否是处理数值的合适选择。
【问题讨论】:
-
根据我有限的经验(2 周的研究),如果您没有这方面的经验,其他一切都是更好的选择。以 boost 精神开始编写非常困难,生成的代码编译速度极慢。最后代码的优雅不值得一游。否则,如果您仔细询问如何询问,您可能希望在本网站上获得帮助。有几个经验丰富的人会回答你遇到的每一个问题(不过要准备好被光顾)
-
在我看来,大部分工作将是整理出您的确切编码协议和数据结构......解析可以很容易地使用 std::stream 和 read() , 一些 if 和 while 语句....
-
@TonyD 你和每个人都犯了同样的错误:“文本”在计算中的任何地方都不是微不足道的。想想Unicode。想想 INF,负 INF,NaN,想想指数,想想(任意)精度,(in)显着空白......最好在开始之前明确要求。致 OP:Spirit 在这里很有用,但你必须学习一些东西,正如 gsf 警告的那样
-
@sehe 我在编写临时解析器的道路上走得很远,并后退一步探索替代方案。 Spirit 看起来很有趣,但我的令牌流有点不合时宜——数字数据已经被转换了。如果我最终使用更难看的临时填充代码来与 Spirit 交互,我会觉得很傻。所以我在这里问一下,做一个小小的健全性检查。
-
@user888379 好的,我不会尝试 Oracle 什么是合适的(我不相信你会想在这里使用 Spirit)。无论如何,我发布了一个答案,显示 Spirit 如何处理输入中的原始二进制浮点数。
标签: c++ boost-spirit hdf5