Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从excel/CSV值创建静态数组_C++_Arrays - Fatal编程技术网

C++ 从excel/CSV值创建静态数组

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,

我在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,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[]={{/*第一个结构的数据*/},{/*第二个结构的数据*/},…}