类似CSV的格式,支持多个"表"和"命名引用"的C库
CSV-like format wit C library supporting multiple "tables" and "named references
我有一些数据要提供给C/c++程序,我可以很容易地将其转换为CSV格式。然而,我需要对CSV标准或我所知道的部分进行一些扩展。
数据是异构的,存在不同大小的不同参数。它们可以是1值、向量或多维数组。我的理想格式是这样的
--+ Size1
2
--+ Size2
4
--+Table1
1;2;3;4
5;6;7;8
--+Table2
1;2
"——+"是某种分隔符。我有两个1值参数,分别命名为Size1和Size2,还有两个多维参数Table1和Table2。在本例中,表1和表2的维度由另外两个参数给出。还可以命名行和列,即可以有一个表,如
--+Table3
A;B
X;1;2
Y;4;5
其中element ("A","X")为1,element ("B","X")为2,以此类推。
换句话说,它就像一系列附加的CSV文件,带有表、行和列的名称。
解析器应该能够利用文件的结构,允许我编写这样的代码:
parse(my_parser,"Size1",&foo->S1); // read Size1 value and write it in &foo.S1
parse(my_parser,"Size2",&foo->S2); // read Size2 value and write it in &foo.S2
foo->T2=malloc(sizeof(int)*(foo->S1));
parse(my_parser,"Table2",foo->T2); // read Table2
如果它能够存储行和列的名称,那将是一个额外的奖励。
我不认为写这样一个库会花费很多,但是我有更重要的事情要做。
是否已经定义了像这样的格式?使用c++的开源库?你对我的问题有其他的建议吗?
提前感谢。
a .
我会使用JSON, boost很容易处理。标量是数组的一种简单形式[2]
数组很简单[1,2]
多维[[1,2,3,4], [5,6,7,8]]
我已经有一段时间没有做这种事情了,所以我不确定代码将如何为您分解。当然,通过扩展,您可以添加行/列名。代码将非常漂亮,也许不像python那样不需要动脑筋,但它应该很简单。
这里是JSON格式的链接:http://json.org这里有一个使用boost读取JSON的stackoverflow链接:使用boost读取JSON文件
一个不错的选择是YAML。
它是一种众所周知的、对人类友好的编程语言数据序列化标准。
它非常适合你的需要:YAML语法被设计成很容易映射到大多数高级语言常见的数据类型:向量,关联数组和标量:
Size1: 123
---
Table1: [[1.0,2.0,3.0,4.0], [5.0,6.0,7.0,8.0]]
有很好的C、c++和许多其他语言的库。要了解如何使用它,请参阅c++教程。
对于互操作性,你也可以考虑OpenCV使用YAML格式的方式:
%YAML:1.0
frameCount: 5
calibrationDate: "Fri Jun 17 14:09:29 2011n"
cameraMatrix: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 1000., 0., 320., 0., 1000., 240., 0., 0., 1. ]
由于JSON和YAML有许多相似之处,您还可以看一下:YAML和JSON之间的区别是什么?
感谢大家的建议。
数据主要是数字,有很多维度,考虑到它的大小,用这些文本格式解析可能很慢,我发现目前最快捷、最干净的方法是使用数据库。
我仍然认为这可能是矫枉过正,但我认为现在没有明显更好的替代方案。
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 如何在openssl-ecc中获取十六进制格式的私钥
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- 将"打开的CV图像"中的"颜色"转换为整数格式
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- TDateTime格式在C++Builder中不会更改
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 指针/引用的 CLion 格式
- 编译复杂的(有很多引用的)ASN模式-证书请求格式(RFC4211)
- 类似CSV的格式,支持多个"表"和"命名引用"的C库