当前位置:天才代写 > tutorial > C语言/C++ 教程 > C语言实现修改文本文件中的特定行

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

2017-11-02 08:00 星期四 所属: C语言/C++ 教程 浏览:523

副标题#e#

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

好的,首先我先论述下成果要求:

其实很简朴,就是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;  
}


#p#副标题#e#

生存文件名为:my_sed.c

运行结果如下:

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

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

<span style="font-size:18px;"><strong>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</strong></span>

实现道理:

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

 

    关键字:

天才代写-代写联系方式