高分求助:存储一个较复杂的结构的问题,甚急,如好,愿将可用分倾囊相赠!!!

zte223456 2010-04-29 10:33:40
环境:VS2008 MFC
windowsXP
描述:我有一个较复杂的绘制图形用的结构数组,数组成员是每一种图形模块的初始化信息,该结构体数组用于图形的初始化。希望能够将这个结构体保存为文本文件,这样在这个结构值变更就只需要修改这个文本文件就可以了。
我搞不清楚的是:如果保存成二进制文件问题不大,但若要保存成文本文件,存储和读取都麻烦很多,不知道怎么控制,希望大家能够给个思路,有相似的实例必高分赠送,若能得到满意答复,可双倍送分。谢谢

还有,图形模块是我自定义的类,不支持串行化

以下是我定义的结构体数组

typedef struct tagStaticDB //静态模块初始信息
{
FILEVERSION stVersion; //版本信息
BLOCKELEMENTINFO stInitData[BL_TYPE_COUNT]; //存储顺序与enum BLOCK_TYPE相同

}STATICDB,*pSTATICDB;

STATICDB是我想要存进文件的结构体,其中包含了一个结构体数组stInitData[BL_TYPE_COUNT]

BLOCKELEMENTINFO的结构描述如下

typedef struct tagBlcokElementInfo
{
//information for universal purpose
int iModuleType; //模块的类型
ELEMENTNODE stSelfIndexInWarehouse; //模块在仓库中的自索引
ELEMENTNODE stFatherIndexInWarehouse; //父模块在仓库中的索引
CList<ELEMENTNODE,ELEMENTNODE&> clsBrotherListInWarehouse; //弟模块在仓库中的索引链表
CList<ELEMENTNODE,ELEMENTNODE&> clsSonListInWarehouse; //子模块在仓库中的索引链表
ELEMENTNODE stInIndexInWarehouse; //入模块在仓库中的索引
ELEMENTNODE stInOutdexInWarehouse; //出模块在仓库中的索引
int iNameOfChainBelong; //所属的显示链表
int iSelfIndexInChain; //所属链表中的索引号
BLOCKCONFIGINFO stConfigInfo; //模块的配置信息
//information for graph
DISPLAYENVIRONMENT stDispEv; //显示环境
POINTXY stCenter; //模块的中心坐标
RECTXY stRect; //模块的区域坐标(若模块为矩形有效)
POINTXY stInPort; //入口点坐标
POINTXY stOutPort; //出口点坐标
int iAdsorbRegion; //吸附范围
int iLayer; //所属图层
int iState; //状态指示

//information for script
int iCodeStartPos; //脚本起始位置
int iCodeEndPos; //脚本结束位置
SCRIPTTEMPLETE stScript; //脚本模板
}BLOCKELEMENTINFO,*pBLOCKELEMENTINFO;



...全文
188 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdsnpeter 2010-04-29
  • 打赏
  • 举报
回复
你自己写txt格式存储并读取就是了。但是不建议这么做,因为牵扯到Parse 文本文件内容,自己写Tag来标记每个记录的含义,自己Parse,势必会写出一堆Bug。我之前就有些一个Parse标准INI的类,但后来发现Bug一堆。

当然你自己有时间可以研究研究。标准Ini的读写函数,可能会有效率的缺失,因为每读取一条记录,就要开启Ini文件一次(会有缓存,但取决于系统如何来实现缓存,自己感觉不可靠)。
redsunxin 2010-04-29
  • 打赏
  • 举报
回复
这样的话,你也可以做到类似XML的用tag的方法,例如第一个type
type \t value
ELEMENTNODE \t value
\t value; //模块在仓库中的自索引

CList<ELEMENTNODE,ELEMENTNODE&> \t size
\t ELEMENTNODE1 value
\t value
\t ELEMENTNODE2 value
...
不然怎么读呢,什么都没。
我想不到更好的方法,还等高手指点。
zte223456 2010-04-29
  • 打赏
  • 举报
回复
非常感谢大家,我明白大家的意思
大家认为最可行的方法就是存储为xml文件了,只是其实我的最初的想法是把这些初始化信息存贮在.ini文件中
zte223456 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 redsunxin 的回复:]
其实我做过txt的读写,就是用一个特殊字符(\t)来把你那些数据都分隔开,一个BLOCKELEMENTINFO存成一行,不过你这个数据太多了,还有很多list之类的,我怕txt不能满足存储。
[/Quote]
可能是我没有描述清楚。。。

一个BLOCKELEMENTINFO存成一行。。。这个实在不太现实。。。
其实我也可以把每一种BLOCKELEMENTINFO存成一个文件,关键是这个文件要有较强的可读性,必要的时候有一些注释在上面帮助阅读,不知道有没有相关的例子。。。
尹成 2010-04-29
  • 打赏
  • 举报
回复
XML读写当然可以,而且网上有很多现成的算法啊
fandh 2010-04-29
  • 打赏
  • 举报
回复
奥,如果用文本的话,你里面估计一样要带很多标识吧,比如对一些数据的描述什么的!
用xml,更适合结构化的数据结构,便于理解!另外,关于xml的读写,都有现成的代码,添加起来很方便!
当然,用文本肯定没有问题,只是要你自己定义文本的结构,自己编写分析读取文本的代码!
最后,将文件存成xml格式,好像好多绘图软件都有!
zte223456 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 muyiyj 的回复:]
"果保存成二进制文件问题不大,但若要保存成文本文件,存储和读取都麻烦很多,"

为什么保存成文本文件就麻烦很多呢?

另外我觉得,可以直接调用mfc里面写ini文件的函数,一般配置参数,初始化参数都是写成ini文件的。
每次程序启动,就读取这些信息,并开辟内存空间进行保存,之后你可以反复调用初始化图形模块了(个人认为只需要初始化一次)
[/Quote]

写ini文件,这个我觉得可行,但这不是我想问的问题。
我只是想要一个将一个较复杂的结构保存为文本文件的一个实例。。。
为什么保存成文本文件就麻烦很多?我是这样想的:
如果存为二进制文件,我只需要将结构作为一块数据读出来,赋给我准备好的结构体变量即可,但如果存为文本文件,那么读写时,我就要对结构体中的每一个成员进行字符转换不是么?那结构体中的每个成员是不是都要解析?这要麻烦多了吧?


还请指点
xiuxianshen 2010-04-29
  • 打赏
  • 举报
回复
网上找点配置文件的读写就差不多了
redsunxin 2010-04-29
  • 打赏
  • 举报
回复
其实我做过txt的读写,就是用一个特殊字符(\t)来把你那些数据都分隔开,一个BLOCKELEMENTINFO存成一行,不过你这个数据太多了,还有很多list之类的,我怕txt不能满足存储。
zte223456 2010-04-29
  • 打赏
  • 举报
回复
我说的是存储为文本文件,以便于用户编辑修改,这个应该不会非常困难吧,为什么要绕开这个选择xml?
fandh 2010-04-29
  • 打赏
  • 举报
回复
关于XML读写,网上有现成的源码!我觉的XML可行!
muyiyj 2010-04-29
  • 打赏
  • 举报
回复
"果保存成二进制文件问题不大,但若要保存成文本文件,存储和读取都麻烦很多,"

为什么保存成文本文件就麻烦很多呢?

另外我觉得,可以直接调用mfc里面写ini文件的函数,一般配置参数,初始化参数都是写成ini文件的。
每次程序启动,就读取这些信息,并开辟内存空间进行保存,之后你可以反复调用初始化图形模块了(个人认为只需要初始化一次)
fandh 2010-04-29
  • 打赏
  • 举报
回复
你的文件有多大?几万行?几十万行!
其实对于现在计算机来说,都不是问题!
visualassist4680 2010-04-29
  • 打赏
  • 举报
回复
xml 需要遍历树,匹配tag,效率没有自己直接写文件高,把结构定义清楚了,直接内存<--->文件,读写的效率要比xml高很多,尤其是数据量大的时候.
zte223456 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 redsunxin 的回复:]
难道就不可以存成XML吗?用MSXML、
[/Quote]
可不可以讲的详细一点。。。
redsunxin 2010-04-29
  • 打赏
  • 举报
回复
难道就不可以存成XML吗?用MSXML、

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧