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
运行效果如下:
我们再来看文件中的内容已经变为:
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语言
下一篇:解析一个有关sizeof用法的题目--sizeof(i++)
本文标题:C语言实现修改文本文件中特定行的实现代码
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/4335.html
您可能感兴趣的文章
- 04-02c语言函数调用后清空内存 c语言调用函数删除字符
- 04-02c语言的正则匹配函数 c语言正则表达式函数库
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言中对数函数的表达式 c语言中对数怎么表达
- 04-02c语言用函数写分段 用c语言表示分段函数
- 04-02c语言编写函数冒泡排序 c语言冒泡排序法函数
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段函数
- 04-02C语言中怎么打出三角函数 c语言中怎么打出三角函数的值
- 04-02c语言调用函数求fibo C语言调用函数求阶乘
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-11ajax实现页面的局部加载
- 01-10delphi制作wav文件的方法
- 01-10SublimeText编译C开发环境设置
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 04-02jquery与jsp,用jquery
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10C#中split用法实例总结
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文