C++ 从excel/CSV值创建静态数组
我在Excel中有一个包含不同数据类型的大数组。请参阅下面的代码片段:C++ 从excel/CSV值创建静态数组,c++,arrays,C++,Arrays,我在Excel中有一个包含不同数据类型的大数组。请参阅下面的代码片段: Param,String1,String2,Bits,Disp fmt,Extra,use act 0,Coarse,Tune,4,2,,0 1,Wave,form,4,7,128,0 2,Filter,Type,4,8,,0 3,F Env,A,4,5,3,0 4,F Env,D/R,4,5,3,0 5,F Env,S,4,5,3,0 6,A Env,A,4,6,6,0 7,A Env,D,4,6,6,0 8,A Env,
Param,String1,String2,Bits,Disp fmt,Extra,use act
0,Coarse,Tune,4,2,,0
1,Wave,form,4,7,128,0
2,Filter,Type,4,8,,0
3,F Env,A,4,5,3,0
4,F Env,D/R,4,5,3,0
5,F Env,S,4,5,3,0
6,A Env,A,4,6,6,0
7,A Env,D,4,6,6,0
8,A Env,S,4,6,6,0
9,A Env,R,4,6,6,0
10,LFO,Wave,4,7,64,0
。。。。。。。等
有两个字符串和一些整数。我需要想出一种方法,把它尽可能有效地变成C++。它是一个嵌入式系统,因此需要在C++代码中完全独立(不能打开其他应用程序,读取文件等)。
我最初的想法是创建一个包含列中数据类型的类。然后声明类的静态数组。但是如何在运行时用数据填充数组呢 数组必须声明为静态常量,以便它进入程序内存,而不是SRAM 关于字符串元素,只有数据中的一些行具有字符串,因此不希望为它们初始化固定大小的数组,因为只有一些行将被填充
显然,在Excel中不一定要存在这个数据,如果C++中有更好的方法生成大的静态数组,我很乐意尝试。 然后创建结构的数组。这将显示语法选项 特别是在本例中,我创建了以下结构:
typedef struct ParamInfo
{
const char *label1;
const char *label2;
uint8_t bits;
uint8_t dispFmt;
uint8_t tag;
uint8_t ctrl;
} ParamInfo;
然后编写了一个解析器,该解析器创建了所使用的所有不同短语的查找,并创建了所有短语的静态常量,因此每个短语在内存中只存储一次。这将使用尽可能少的内存,而不是在结构中声明所需最大大小的数组并多次声明相同的短语
static const char S_COARSE[] = "Coarse";
static const char S_TUNE[] = "Tune";
static const char S_WAVE[] = "Wave";
static const char S_FORM[] = "form";
static const char S_FILTER[] = "Filter";
等等
然后填充结构的静态常量数组:
static const ParamInfo ATM_PARAM_INFO[48] = {
{
S_COARSE,S_TUNE,4,2,0,1 // ATM_COARSETUNE
},
{
S_WAVE,S_FORM,4,7,128,2 // ATM_WAVEFORM
},
{
S_FILTER,S_TYPE,4,8,0,3 // ATM_FILTTYPE
},
{
S_F_ENV,S_A,4,5,3,4 // ATM_FENVA
等等……你知道这个文件有多大吗?你不可能拥有一个不知道它会有多大的数组,所以你想把数据硬编码到你的程序中?然后我建议制作一个小的“预处理器”程序,它读取输入文件,并创建一个C++源文件,用数据初始化结构数组。然后使用生成的源文件进行构建。而且,由于您让您的程序解析输入文件以在主机系统上运行,因此它可以使用它非常喜欢的任何好的CSV解析库。:)@NathanOliver是的,128行,每个行有2个字符串(最多12个字符)和5个ints@Someprogrammerdude好的,解析CSV生成C++代码是很好的。我能做到。但编译时填充静态数组的实际语法是什么?
someStructureType myArrayOfStructures[]={{/*第一个结构的数据*/},{/*第二个结构的数据*/},…}