手机
当前位置:查字典教程网 >编程开发 >C语言 >C语言实现修改文本文件中特定行的实现代码
C语言实现修改文本文件中特定行的实现代码
摘要:好的,首先我先叙述下功能要求:其实很简单,就是Shell中sed命令的C语言实现,实现定位到所需要的字段的那一行,之后修改成需要的内容。但是...

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

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

问题描述:

文本内容:

复制代码 代码如下:

wireless.1.authmode=1

wireless.1.compression=0

wireless.1.current_ap=ssid12

wireless.1.current_state=1

wireless.1.devname=ath0

wireless.1.enable_slave1_status=disabled

wireless.1.enable_slave2_status=disabled

wireless.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 = 0;

int len = 0;

int 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

运行效果如下:

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

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

复制代码 代码如下:

wireless.1.authmode=1

wireless.1.compression=0

wireless.1.current_ap=ssid12

wireless.1.current_state=0

wireless.1.enable_slave1_status=disabled

wireless.1.enable_slave2_status=disabled

wireless.1.enable_slave3_status=disabled

实现原理:

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

【C语言实现修改文本文件中特定行的实现代码】相关文章:

c语言中十进制转二进制显示小工具的实现代码

基于C语言实现shell指令的详解

方阵顺时针旋转的实现代码

用C++实现一个链式栈的实例代码

用C语言实现单链表的各种操作(一)

用C# 实现鼠标框选效果的实现代码

C语言 扩展欧几里得算法代码

C语言调试手段:锁定错误的实现方法

C 创建链表并将信息存储在二进制文件中读取的实例代码

用C语言实现单链表的各种操作(二)

精品推荐
分类导航