C語言實現修改文字檔中的特定行

來源:互聯網
上載者:User

最近由於項目需要實現修改檔案的功能,所以,博主認真查閱了一些資料,但是,很遺憾,並沒有太多的 收穫。

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

其實很簡單,就是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;  }

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。