具有类似CSV格式的C库,支持多个"表"和#34;命名参考

时间:2014-05-12 20:52:39

标签: c++ c parsing csv

我有一些数据要提供给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 ++的开源库?你对我的问题有其他建议吗?

提前致谢。

一个。

3 个答案:

答案 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]]

CC++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)

感谢大家的建议。

数据主要是数字的,有很多维度,考虑到它的大小,用这些文本格式解析起来可能很慢,我发现最快最干净的方法就是使用数据库。

我仍然认为它可能有点矫枉过正,但现在没有明显更好的替代方案恕我直言。