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;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, include
, c语言程序修改
, buffer
, wireless
, 字段
, 一行
特定行
c语言实现文本编辑器、c语言 截取特定字符串、editplus提取特定文本、批量提取txt特定文本、易语言取特定文本,以便于您获取更多的相关知识。

时间: 2024-10-30 04:24:12

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

c++ 问题 怎么文本文件中读取特定行的数据进行排序?

问题描述 c++ 问题 怎么文本文件中读取特定行的数据进行排序? 例如我的文件保存格式是这样的: 怎么得到科研时间 和排名的数据 解决方案 行的结束符是回车换行,即 0x0D 0x0A 想读取一行,最简单.原始的方法就是一个字符一个字符读,然后判断是否是回车换行?如果是,则一行结束:否则继续读. 先将数据读取到结构体中,然后想怎么处理就与文件没有关系了.处理完后,再写入文件. 解决方案二: 需读:读而不用.一行一行读下去,读到你要的,进行处理. 解决方案三: 这个地方举个例子,将所有的关于的信息

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

好的,首先我先叙述下功能要求:其实很简单,就是Shell中sed命令的C语言实现,实现定位到所需要的字段的那一行,之后修改成需要的内容.但是由于C语言是面向过程的语言,需要顺序执行的特点,所以,实现中遇到了很多麻烦,在这里博主将实现的过程描述如下,以便大家参考. 问题描述: 文本内容: 复制代码 代码如下: wireless.1.authmode=1wireless.1.compression=0wireless.1.current_ap=ssid12wireless.1.current_sta

用C语言实现从文本文件中读取数据后进行排序的功能_C 语言

功能介绍 程序的功能是从外部读取一个包括int型数据的文本文件,然后将它保存到内部临时数组,对数组进行排序后,以文本形式输出到指定的文件上.因为是int类型的数据,没有很严重的损失精度的问题. 正常运行要求: 包括数据的源文件内不能包括其他任何除数字和空白字符(空格,制表符,换行符)之外的任何字符,源文件最开始必须是数字字符,要保证源文件的数据计数正确.同时保证文件名有效. 运行结果 data.txt: obj.txt: 完整代码 警告:版权所有,谨供参考! #include <stdio.h>

C语言找出数组中的特定元素的算法解析_C 语言

     问题描述:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它.能否只用一个额外数组和少量其它空间实现.       思路:如果能用两个辅助数组,那么相对来说简单一点,可定义数组Min和数组Max,其中Min[i]表示自a[i]之后的最小值(包括a[i]),Max[i]表示自a[i]之前元素的最大值.有了这两个辅助数组后,对于a[i],如果它大于Max[i-1]并且小于Min[i+1],那么就符合要求.       但是题目要求

java语言:修改session中的hashMap值,为什么不需要更新session

问题描述 publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{HttpSessionsession=request.getSession(false);RequestDispatcherdispatcher;//如果session不存在,转向/ch04/books.jspif(session==null){dispatcher=reque

用vbscript实现从文本文件中删除所有重复行的代码_vbs

问: 您好,脚本专家!如何从文本文件中删除所有重复行? -- SW 答: 您好,SW.您知道,成为一名脚本专家便意味着开始永无止境地寻找给定问题的最终解决方案.(或者至少在我们的经理问为什么我们似乎从未真正完成什么时,我们是这么告诉他的:"老板,永无止境的寻找过程需要时间!")这就是为什么我们很高兴看到您的问题的原因.不久前 我们回答了一个关于从文本文件中删除重复名字的类似问题.我们想到的解决方案十分简单而且效果不错:只是我们不确定那是最佳解决方案.现在,很感谢您的问题,我们可以再次尝

c语言-如何用c读取从excel导出的文本文件中的text字段

问题描述 如何用c读取从excel导出的文本文件中的text字段 (初学c语言)我想编写一个实现材料管理功能的程序.因还不会从Excel中直接读取数据,因此选择了从Excel导出到txt文件中,然后再读取到程序当中. 但是问题来了.经常遇到的情形是,记录都有一个或者多个字段是字符型(数据库中的描述,非C语言的字符),从Excel中导出的文本中是以"text,text"处理的,即以英文状态下的双引号将这个字段放在了一起.下面是某条记录: 项目号 仓库名称 货位名称 Ident代码 材料代

修改内容-C语言修改文件中某一行

问题描述 C语言修改文件中某一行 RT,在vc2010下,做的学生管理系统.没有采用链表. 已经找到所要修改的行,并且修改成功,在内存中已经看到修改后的结果,并用fflush写回文件. 但是文件就是没有改变,上代码,求帮助,已经卡在这一天半了. #include"head_1.h" void change_stu(int id,char name[20],float score) { FILE *fp2; char str[20]; char a[20]; int ch2; int i

用友软件-求大神帮忙指点修改SQL数据库中所有特定字符串

问题描述 求大神帮忙指点修改SQL数据库中所有特定字符串 俺有一门水课,看着书一步步地照着做一个用友软件的项目,真的很无聊,记录公司发生的各种交易.我现在想把同学的作业拿过来改一下然后上交.这个用友软件用SQL数据库管理数据.这个用友软件,每个项目有一个账套主管,各种交易需要主管在软件里授权签名.现在我想做的是,首先修改账套主管名字,然而由于各个交易的签字信息不会随账套主管名字改变,我还得修改各个交易的签字. 直观的办法是,直接在SQL里搜索所有值为账套主管名字的字符串,然后替换成我的名字,求S