C++怎么从txt文件里读取数据放入类中

陈三岁灬 2017-03-27 08:07:07
类的成员是这些

保存数据的函数
void Company::Save(std::list<Employee> &list)
{
ofstream outfile("F:\\131\\VS\\Worker\\Worker\\Worker\\Employee.txt", ios::trunc);
if (outfile.is_open())
{
outfile << setw(4) << "编号" << setw(9) << "姓名" << setw(9) << "年龄" << setw(9) << "性别" << setw(9) << "邮编" << setw(9) << "部门" << setw(10) << "工资" << endl;

for (auto it = list.begin(); it != list.end(); it++)
{
outfile << *it << endl;
}
}
outfile.close();
}

...全文
1774 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengqiao1999 2020-05-27
  • 打赏
  • 举报
回复
字符串不太好控制,你可以采用二进制写入 普通类型: void Serialize(std::ostream & os, const T & val) { os.write((const char *)&val,sizeof(T)); } 对于字符类型: void Serialize(std::ostream & os, const T & val) { unsigned int size = val.size(); os.write((const char *)&size, sizeof(size)); os.write((const char *)val.data(),size * sizeof(typename T::value_type)); }
Summer丶snow 2020-05-26
  • 打赏
  • 举报
回复
引用 1 楼 ztenv 的回复:
按你写的方式读出来
写的时候直接把数据就写到文件里了,但是读的时候,由于对象里数据是封装的,没办法直接访问地址,所以是读不进去的呀,只能写不能读
ztenv 版主 2020-05-26
  • 打赏
  • 举报
回复
引用 11 楼 Summer丶snow 的回复:
引用 1 楼 ztenv 的回复:
按你写的方式读出来
写的时候直接把数据就写到文件里了,但是读的时候,由于对象里数据是封装的,没办法直接访问地址,所以是读不进去的呀,只能写不能读
本身就存在问题,看一下序列化吧,别用这种方式了,
Summer丶snow 2020-05-16
  • 打赏
  • 举报
回复
引用 8 楼 bjgxjob 的回复:
简单点的做法是将类成员修改为一个结构体,全部使用定长数据。 写入文件与读出,使用完整的结构体对象。
但是这样不就破坏封装性了吗?
Summer丶snow 2020-05-16
  • 打赏
  • 举报
回复
我也有这个问题,这个问题的核心是,没办法把数据像普通变量那样直接读写,普通变量直接给出地址就读进来了,但是对象是封装的,成员变量是没办法直接进行读入的,除非把成员变量定义为public,但是这样不就破坏封装性了吗?
bjgxjob 2018-07-09
  • 打赏
  • 举报
回复
简单点的做法是将类成员修改为一个结构体,全部使用定长数据。 写入文件与读出,使用完整的结构体对象。
jena_wy 2018-07-09
  • 打赏
  • 举报
回复
读取文件》解析文件到变量
走好每一步 2018-07-07
  • 打赏
  • 举报
回复
楼主这种做法不大好,输出两个变量到文件时,中间需要有分隔符的!!
参考下MFC CArchive
karlzpsong 2018-07-07
  • 打赏
  • 举报
回复
类结构可以考虑二进制保存与读取:

储存使用write函数,读取使用read函数

储存:

ofstream fout("file",ios_base::out|ios_base::binary);

for (auto it = list.begin(); it != list.end(); it++){

fout.write(char*(*it),sizeof(*it));

}

读取:

ifstream fout("file",ios_base::out|ios_base::binary);

Employee* ptr = new Employee;

fout.read(char*(*ptr),sizeof(*ptr));
JackyRao 2018-07-06
  • 打赏
  • 举报
回复
for (auto it = list.begin(); it != list.end(); it++)
{
outfile << *it << endl;
}
保持了什么信息, 代码不全
幻夢之葉 2017-03-28
  • 打赏
  • 举报
回复
for (auto it = list.begin(); it != list.end(); it++) { outfile << *it << endl; } 这里的意思就是你类重装了 << 操作符,那么也应该重装 >> 操作符,一样的顺序读进来就可以了
ztenv 版主 2017-03-28
  • 打赏
  • 举报
回复
按你写的方式读出来
Grove097 2017-03-28
  • 打赏
  • 举报
回复
怎么写进去的就怎么读出来,反操作而异

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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