程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話完成修正文本文件中特定行的完成代碼

C說話完成修正文本文件中特定行的完成代碼

編輯:關於C++

C說話完成修正文本文件中特定行的完成代碼。本站提示廣大學習愛好者:(C說話完成修正文本文件中特定行的完成代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是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


完成道理:

這裡完成的效力比擬高,由於不是把全部文件的內容裝入緩沖區中,而是一行一行的讀取,曉得婚配為止,以後應用寫文件的特征,直接籠罩所寫內容便可,由此完成所需功效

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved