C语言实现修改文本文件中的特定行

               

     最近由于项目需要实现修改文件的功能,所以,博主认真查阅了一些资料,但是,很遗憾,并没有太多的收获。

好的,首先我先叙述下功能要求:

其实很简单,就是Shell中sed命令的C语言实现,实现定位到所需要的字段的那一行,之后修改成需要的内容。但是由于C语言是面向过程的语言,需要顺序执行的特点,所以,实现中遇到了很多麻烦,在这里博主将实现的过程描述如下,以便大家参考。

问题描述:

文本内容:

wireless.1.authmode=1wireless.1.compression=0wireless.1.current_ap=ssid12wireless.1.current_state=1wireless.1.devname=ath0wireless.1.enable_slave1_status=disabledwireless.1.enable_slave2_status=disabledwireless.1.enable_slave3_status=disabled
我需要做的就是修改第四行的内容,使之变为:

wireless.1.current_state=0

问题看似简单,实现过程颇费周折。。。


这里我给出实现的代码,注释已经加在代码中:

/* * Author:DLUTBruceZhang * Date: 2013.06.24 */#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>int main()/*  *linebuffer:读取文件中的一行存入的缓冲  *buffer1:一行中第一个字段的存入缓冲  *buffer2:一行中第二个字段的存入缓冲  */ char linebuffer[512] = {0}; char buffer1[512] = {0}; char buffer2[512] = {0};  int line_len = 0int len = 0int res;  /*  * cc.cfg是文件名,r+代表可以读写文件  */ FILE *fp = fopen("cc.cfg", "r+"); if(fp == NULL) {  printf("open error");  return -1; } while(fgets(linebuffer, 512, fp)) {  line_len = strlen(linebuffer);  len += line_len;  /*   * buffer1=wireless.1.current_state   * buffer2=1   */  sscanf(linebuffer, "%[^=]=%[^=]", buffer1,buffer2);  if(!strcmp("wireless.1.current_state", buffer1))  {   /*    * 由于已经找到所需要写的位置,所以需要写位置的“头”    */   len -= strlen(linebuffer);   /*    * 实现文件位置的偏移,为写文件做准备    */   res = fseek(fp, len, SEEK_SET);   if(res < 0)   {    perror("fseek");    return -1;   }   strcpy(buffer2, "=0");   /*strcat(buffer1, "=");*/   strcat(buffer1, buffer2);   printf("%d",strlen(buffer1));   /*    * 写文件,存入所需的内容       */   fprintf(fp, "%s", buffer1);   fclose(fp);   return;  } }return 0;}

保存文件名为:my_sed.c

运行效果如下:



我们再来看文件中的内容已经变为:

wireless.1.authmode=1wireless.1.compression=0wireless.1.current_ap=ssid12wireless.1.current_state=0wireless.1.enable_slave1_status=disabledwireless.1.enable_slave2_status=disabledwireless.1.enable_slave3_status=disabled

实现原理:

这里实现的效率比较高,因为不是把整个文件的内容装入缓冲区中,而是一行一行的读取,知道匹配为止,之后利用写文件的特性,直接覆盖所写内容即可,由此完成所需功能

           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言是一种功能强大的编程语言,可以用来实现各种各样的应用程序,包括图书管理系统。在这个系统,我们可以使用C语言来处理文本文件,其包含1000存储图书信息。 首先,我们可以使用C语言文件操作函数来读取文本文件的内容。可以使用fopen函数打开文件,并使用fgets函数逐读取文件的数据。在图书管理系统,每一可以表示一本书的信息,包括书名、作者、出版日期等等。 接下来,我们可以使用字符串处理函数来解析每一的数据。例如,可以使用strtok函数将每一按照特定的分隔符分割成单个的字段。然后,可以将这些字段存储到结构体或数组,以方便后续的操作。 在图书管理系统,我们可以实现各种功能,例如添加图书信息、删除图书信息、更新图书信息、搜索图书等等。对于每个功能,我们可以使用C语言的控制流语句(如条件语句和循环语句)来实现相应的逻辑。 对于添加图书信息功能,我们可以使用fseek函数定位到文件末尾,然后使用fprintf函数将新的书籍信息写入到文件。 对于删除图书信息功能,我们可以逐读取文件的数据,将需要删除的书籍信息从内存删除,并使用文件操作函数将更新后的数据写回到文件。 对于更新图书信息功能,我们可以读取文件的数据,并根据用户输入的更新内容进相应的修改,最后再将更新后的数据写回到文件。 对于搜索图书功能,我们可以逐读取文件的数据,与用户输入的搜索条件进比对,找到匹配的书籍并输出到屏幕上。 总的来说,使用C语言实现图书管理系统文本1000的过程,我们需要利用文件操作函数、字符串处理函数和控制流语句等C语言的特性,以及结构体或数组等数据结构来存储和处理图书信息。这样可以方便地实现各种功能,使图书管理系统能够高效地管理和操作大量的图书数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值