VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 924|回复: 5

请教关于文件的打开和保存数据操作问题:使用串行化

[复制链接]

2

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-10-21 14:30:02 | 显示全部楼层 |阅读模式
问题归纳:串行化保存双精度型数据,十进制,换行,空格
代码如下所示,我的数据保存在一个集合类m_SelPtList中,其有三个成员变量(分别为X,Y,Z三个坐标值,类型是double),我这样保存下来的是二进制格式的文件,我想请问如何转为十进制显示的格式(即在文件中保存下来的是十进制的).
CFile file("1.txt",CFile::modeCreate | CFile::modeWrite);
CArchive ar(&file,CArchive::store);
int iCount=Spt.m_SelPtList.GetSize();
for(int i=0;i<iCount;i++)
{
ar<<m_SelPtList[i]->x<<m_SelPtList[i]->y<<m_SelPtList[i]->z;
}
在文件中我希望是按如下方式保存:每一行代表一个点,每个点的坐标以空格隔开分别存放X,Y,Z坐标.如下示:
-2.372417e+02 -4.032650e+01 -5.574990e+01//点一
-2.260712e+02 -4.186780e+01 -5.933653e+01//点二
请问如何在串行化中实现换行保存?空格隔开每个值?打开此文件的代码如何写更好?
回复

使用道具 举报

2

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-10-21 15:45:01 | 显示全部楼层
//最笨的方法?
CFile file("1.txt",CFile::modeCreate | CFile::modeWrite);
char chKG[2]=" ";//空格
char chHH[1]={10};//回车
int iCount=m_SelPtList.GetSize();//待保存数据总数
for(int i=0;i<iCount;i++)
{
        double vex_x[1]={Spt.m_SelPtList[i]->x};//取出第一点
        double vex_y[1]={Spt.m_SelPtList[i]->y};//取出第二点
        double vex_z[1]={Spt.m_SelPtList[i]->z};//取出第三点
        file.Write(vex_x,sizeof(vex_x[0]));//保存第一点
        file.Write(chKG,2);//空格
        file.Write(vex_y,sizeof(vex_y[0]));//保存第二点
        file.Write(chKG,2);//空格
        file.Write(vex_z,sizeof(vex_z[0]));//保存第三点
        file.Write(chHH,2);//回车
}
        file.Close();

但是我这样保存下来的还是二进制格式的文件,我想保存为十进制格式的文件,如何做?
回复

使用道具 举报

0

主题

15

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-10-21 16:00:01 | 显示全部楼层
可以使用CString::Format()来完成

double value = 123456.6789;

CString strValue;
strValue.Format("%le ", value);

然后再把strValue保存到文件就可以了
回复

使用道具 举报

0

主题

25

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
发表于 2020-10-21 17:00:01 | 显示全部楼层
我想保存为十进制格式的文件
===========

你要的是文本文件.

另外你的Serialize最好放在集合类m_SelPtList中.
回复

使用道具 举报

0

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-10-21 17:45:01 | 显示全部楼层
你可以用CString 对象先格式化要写的数据,
然后用ar写入该CString对象到文件即可
回复

使用道具 举报

2

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-10-21 18:45:01 | 显示全部楼层
谢谢sky_hexia,yctoya和zrl8668
另回车用这个:char chHH[5]="\r\n";//回车
问题解决,爽:)再次表示感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表