当前位置: 首页 > 编程笔记 >

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

岳俊晖
2023-03-14
本文向大家介绍利用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语言替换文件中某一行的方法到这就基本结束了,大家都学会了吗?希望这篇文章的内容对大家的学习和工作能带来一定的帮助,如果有疑问,大家可以留言交流。

 类似资料:
  • App中利用Plist文件进行多语言切换的demo。 1.使用PLIST文件进行创建多国语言,项目中并没有使用NSLocal 2.使用本地存储用户所选择的用户设置,可以用coredata之类。demo中为了演示方便使用NSUserDefaults 进行存储用户设置。 作者说:本demo只是设置多语言的一个小技巧方法,代码比较简单,还希望大家多多补充和反馈:) [Code4App.com]

  • 问题内容: 我有一个文本文件,我只想更改文件的第一行。该文件可能长达数百万行,因此我宁愿不必遍历所有内容,因此我想知道是否还有另一种方法可以做到这一点。 我还想对第一行应用一些规则,以便将某些单词的实例替换为其他单词。 这可能吗? 问题答案: 除非结果行的长度与原始行的长度不同,否则A 将达到目的。 如果事实证明您被迫执行复制(替换第一行,其余数据应原样复制),我建议使用和。首先使用的读取第一行。

  • 本文向大家介绍C语言读写配置文件的方法,包括了C语言读写配置文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言读写配置文件的方法。分享给大家供大家参考。具体如下: CException.h如下: File.h如下: File.c如下: 希望本文所述对大家的C语言程序设计有所帮助。

  • 本文向大家介绍Go语言中嵌入C语言的方法,包括了Go语言中嵌入C语言的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言中嵌入C语言的方法。分享给大家供大家参考。具体分析如下: Go语言官方带了一个工具叫cgo,可以很方便的在Go语言代码中内嵌C代码或做C和Go代码的集成。下面是一段简单的在Go中内嵌C的实验代码: 把上面代码保存到ctest.go文件,运行:go run cte

  • 问题内容: 我是shell脚本的新手,并且对如何使用字符串或其他工具替换文本文件中的第一行感到困惑。这是文本文件的内容: 我想将第一行(电影文件路径)替换为just (可能是shell脚本中的变量) 请指导我如何执行此操作。我遇到了一些帖子,我需要在这里使用吗? 问题答案: sed是正确的工具,请尝试执行以下操作: 说明 平均第一行 剩下的就是替换:我们用变量替换所有(。*)

  • 本文向大家介绍Go语言清除文件中空行的方法,包括了Go语言清除文件中空行的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言清除文件中空行的方法。分享给大家供大家参考。具体实现方法如下: 这里使用Go语言读取源文件,去掉空行,并写到目标文件 希望本文所述对大家的Go语言程序设计有所帮助。