读书人

格式化存储的算法(字符串相关)

发布时间: 2012-03-27 13:44:24 作者: rapoo

求一个格式化存储的算法(字符串相关)
第一次来CSDN发贴,希望各位老鸟不要笑话,也希望我能把问题说明白。。。

要做的事情是这样的,想把一些有用的变量值(各种类型)的值存放到一个文件里,用的时候还可以从文件里把变量值取出来赋值给变量。

1.存放的时候格式上没有什么问题,只是如何把一个变量名字(比如abcd_1)变成字符串的形式没想出来。(是不是可以用问题2里面变量表的形式来“反查表”?)
2.读取的时候遇到的问题比较多,先说下数据的形式:

////////////////////////////////////////////////////
文件里的存放形式是这样的:(变量名只是举例,无规则)
变量名:(数据);变量名:(数据)……

{a1:(12);b1:(34,56);c1:(78,90,ab,cd)}
{a2:(55,66);b2:(77)}
{...}
{...}
/////////////////////////////////////////////////////


处理上每次取一行也就是一个{}中的内容放到一个字符串里
比如现在char *Sring1 = "{a1:(12);b1:(34,56);c1:(78,90,ab,cd)} ";
那么如何来根据变量名(字符串形式)来找到这个变量来进行赋值呢?

变量名已经用strtok提取出来,目前想到的办法是用一个结构:
typedef struct
{
char * VarName;
unsigned shortVarlen;
char *VarHead;
}VarUnit;

const VarUnit VarTable[] =
{
{ "a1 ", 1,&a1},
{ "b1 ", 2,&b1},
{ "c1 ", 4,&c1}
};

这种方法来差变量表,再根据长度用变量指针来操作每个字节进行赋值
我知道也可以用atoi(),atol()这两个函数来处理整型数和长整,但是问题如果用现在的方法,用char型指针指向short和long会给warning,但是要把每个类型都分开定义结构的话存储都会变得很麻烦,有没有类似条件编译那种可以根据变量长度定义指针类型的方法?就是说看到长度为1,就定义指针是char型,长度为2就定义成short型的?

[解决办法]
typedef struct
{
char * VarName;
void *VarHead; //用void *
//unsigned shortVarlen;
unsigned short Vartpye;
}VarUnit;

相同长度的类型也是存在的,
比如 Varlen=4, 就不知道类型了。
改为自定义的一个 Vartpye【类似一个索引表】比较合适。

比如读取Vartpye是 1就将VarHead强制转化为 char *;
读取Vartpye是 2 就将VarHead强制转化为 short *;
...

读书人网 >C语言

热点推荐