我有一些数据要提供给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
其中元素(“A”,“X”)为1且(“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
如果它能够存储行和列名称,那将是一个奖励。
我认为编写这样的库不会花费太多时间,但我有更重要的事情要做ATM。
是否有像这样的已定义格式?使用C ++的开源库?你对我的问题有其他建议吗?
提前致谢。
一个。
答案 0 :(得分:1)
我会使用JSON,它会很容易处理。标量是数组的简单情况 [2]
阵列很简单 [1,2]
多维 [[1,2,3,4],[5,6,7,8]]
自从我做了这类事以来已经有一段时间了,所以我不确定代码会如何为你打破。通过扩展,你可以添加行/列名称。代码将非常好,也许不像python那样无脑,但它应该很简单。
以下是JSON格式的链接:http://json.org 这是一个用于通过提升读取JSON的stackoverflow链接:Reading json file with boost
答案 1 :(得分:1)
一个好的选择可能是YAML。
它是一种众所周知的,人性化的编程语言数据序列化标准。
它非常符合您的需求:YAML语法旨在轻松映射到大多数高级语言通用的数据类型:矢量,关联数组和标量:
Size1: 123
---
Table1: [[1.0,2.0,3.0,4.0], [5.0,6.0,7.0,8.0]]
C,C++和many other languages都有很好的图书馆。 要了解如何使用它,请参阅C++ tutorial。
对于互操作性,您还可以考虑OpenCV uses YAML format的方式:
%YAML:1.0
frameCount: 5
calibrationDate: "Fri Jun 17 14:09:29 2011\n"
cameraMatrix: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 1000., 0., 320., 0., 1000., 240., 0., 0., 1. ]
由于JSON和YAML有许多相似之处,您还可以查看:What is the difference between YAML and JSON? When to prefer one over the other
答案 2 :(得分:0)
感谢大家的建议。
数据主要是数字的,有很多维度,考虑到它的大小,用这些文本格式解析起来可能很慢,我发现最快最干净的方法就是使用数据库。
我仍然认为它可能有点矫枉过正,但现在没有明显更好的替代方案恕我直言。