c语言替代法,利用C语言替换文件中某一行的方法

文件中存贮的内容如下所示:

11 1122 0 1122 * * 0 0

22 222 0 222 * * 0 0

33 333 0 333 * * 0 0

通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell。

具体的函数函数原型如下所示:

FILE*fopen(const char*filename,const char *mode);

int fprintf(FILE*stream,const char *format,...)

int fscanf(FILE* stream,const char *format,...)

int fseek(FILE*stream,long offset,int origin)

long ftell(FILE* stream)

首先,数据写入到文件中的是追加的形式。

具体的写入代码如下所示:

主要写入时要指定每个数据的宽度,若不指定,当修改某行的数据,修改后的长度大于修改前得长度,将影响文件中的下一行。制定宽度之后,只要修改后的长度不大于制定的宽度,都不影响下面的内容。(这是注意点)

FILE *fp=fopen("clientinfo.txt","ar+");

Clientinfo info;

memset(&info,0,sizeof(Clientinfo));

。。。。

。。。。/*完成对info结构体的赋值*/

fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\

info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);

fprintf(fp,"\n");

fclose(fp);

修改处的代码如下所示,整个代码是我在MFC中实现的:

FILE *fp=fopen("clientinfo.txt","r+");

Clientinfo info;

long nline=0,n;

memset(&info,0,sizeof(Clientinfo));

int oldline=0;/*记录匹配位置的前一行的偏移量*/

CString str;

while((n=fscanf(fp,"%s %s %d %s %s %s %d %d",info.id,info.nickname,\

&info.online,info.pwd,info.encryp,info.ip,&info.port,&info.fd))!=EOF)

{

str.Format("%d",nline);

MessageBox(str);

if(strncmp(info.id,id,id.GetLength())==0)/*查找要修改的位置*/

{

oldline=nline;

break;

}

nline=ftell(fp);

}

fseek(fp,oldline,SEEK_SET);/*定位到要修改的位置,注意,这个位置是上一次读的最后,故写的时候要先写换行,第一行除外*/

if(oldline!=0)

{

fprintf(fp,"\n");

}

fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\

info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);

fprintf(fp,"\n");

fclose(fp);

下面是修改后的数据,修改第二行,没有影响前后的数据。

11 1122 0 1122 * * 0 0

22 222f 0 222f * * 0 0

33 333 0 333 * * 0 0

总结

利用C语言替换文件中某一行的方法到这就基本结束了,大家都学会了吗?希望这篇文章的内容对大家的学习和工作能带来一定的帮助,如果有疑问,大家可以留言交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值