VerySource

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

求高手指教vc中文本文件修改的好方法

[复制链接]

2

主题

11

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-23 19:30:01 | 显示全部楼层 |阅读模式
在文本文件中我存储了结构体(学生信息记录 姓名 学号 成绩)
比如文本文件中的内容为:

MaWenTao
99001
88
LiMing
99002
92
WangFang
99003
89

现在我要修改LingMing的信息记录 比如 成绩 92 改为 95,请大家指教,我想说明的是我不能使用数据库,谢谢!
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-5-6 17:30:01 | 显示全部楼层
用字符串匹配到需要改的结构头,然后读出修改结构内容,再写到文件中,不知行不
回复

使用道具 举报

0

主题

78

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-5-7 06:15:01 | 显示全部楼层
就是文件内容查找咯 ~~
回复

使用道具 举报

2

主题

11

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-5-7 06:45:01 | 显示全部楼层
这样我想也可以,但每次都要对整个文件重写,我想知道是不是有一种方法比如用seek指针定位可以直接修改的方法,或是有其他的类库可以直接调用方法可以修改。谢谢!
回复

使用道具 举报

2

主题

11

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-5-7 10:45:01 | 显示全部楼层
请教高手能给出代码.
回复

使用道具 举报

0

主题

78

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-5-7 15:30:01 | 显示全部楼层
可以定义一个结构体,
三个成员: 姓名 学号 成绩

用 CFILE 的Read方法 或者是 标准库的 fread 函数,
或者是 ifsteam 的read 方法 ...

每次读取一个结构体的内容,
然后判断 姓名 是否是需要修改的记录,
如果是则进行修改,
不是则继续读取下一记录的信息。

修改完毕后,把该记录写回到文件中就可以了,
注意调整文件指针的位置 ~~
回复

使用道具 举报

0

主题

55

帖子

44.00

积分

新手上路

Rank: 1

积分
44.00
发表于 2020-5-8 08:30:01 | 显示全部楼层
如果是不等长修改,就只能每次重写整个文件
回复

使用道具 举报

2

主题

11

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-5-8 14:00:01 | 显示全部楼层
应该是等长修改
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-5-30 13:30:01 | 显示全部楼层
你试试吧
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

typedef struct{
        long long ID;
        string name;
        int r1,r2,r3;
}data,*pdata;
  
  int   main()   
  {
          data d;
          d.ID=5050379001;
          d.name="4k.grubby";
          d.r1=85;
          d.r2=87;
          d.r3=83;
          data d0,d1;
          d0.ID=5050379002;
          d0.name="john";
          d0.r1=d0.r2=d0.r3=90;
          d1.ID=5050379003;
          d1.name="tom";
          d1.r1=d1.r2=d1.r3=87;
  ofstream File("student.db",ios::binary);//新建二进制文件
  File.write((const char*)(&d),sizeof(data));
  File.write((const char*)(&d0),sizeof(data));
  File.write((const char*)(&d1),sizeof(data));
  d1.name="jerry";//修改数据
  File.seekp(2*sizeof(data));//移动到第三组数据处
  File.write((const char*)(&d1),sizeof(data));//覆盖
  File.close();
  ifstream iFile("student.db",ios::binary);
  data d2;
  iFile.seekg(sizeof(data)*2);
  iFile.read((char*)(&d2),sizeof(data));
  cout << d2.name <<d2.ID<< endl;  
  iFile.close();
  }     
回复

使用道具 举报

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

本版积分规则

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

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