首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

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

求一个格式化存储的算法(字符串相关)
第一次来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 *;
...

热点排行