linux C 修改文字檔案中指定行的內容
1、可隨意修改內容
/* * Author:aniu12<[email protected]> * Date: 2014.02.13 */ #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}; char save[100][512]; memset(save, 0, sizeof(save)); int line_len = 0; int len = 0; int res; int i=0; int j=0; int k=0; /* * cc.cfg是檔名,r+代表可以讀寫檔案 */ FILE *fp = fopen("test.txt", "r+"); if(fp == NULL) { printf("open error"); return -1; } /* * 複製檔案內容到快取陣列save[][]中 */ while(fgets(save[i], 512, fp)) { i++; } fseek(fp,0,SEEK_SET); while(fgets(linebuffer, 512, fp)) { k++; /* * 在檔案中查詢符合條件的那一行內容,並記錄當前行數 */ sscanf(linebuffer, "%[^=]=%[^=]", buffer1,buffer2); if(!strcmp("wireless.1.current_state", buffer1)) { k--; break; } } /* * 將要修改的內容寫入快取中 */ strcpy(buffer2, "=311\0"); strcat(buffer1, buffer2); buffer1[strlen(buffer1)]='\n'; printf("%d\n",strlen(buffer1)); printf("%s\n",buffer1); memset(save[k], 0, 512); strncpy(save[k],buffer1,512); /* * 清空檔案內容 */ fseek(fp,0,SEEK_SET); truncate("./test.txt",0);//clean test.txt /* * 將快取中的資料按行寫入檔案中 */ fseek(fp,0,SEEK_SET); for(j=0;j<i;j++) { fwrite(save[j],strlen(save[j]),1,fp); } fclose(fp); return 0;
}
2、Shell中sed命令的C語言實現
/* * Author:aniu12<[email protected]> * Date: 2013.02.13 */ #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}; char save[100][512]; memset(save, 0, sizeof(save)); int line_len = 0; int len = 0; int res; int i=0; int j=0; /* * cc.cfg是檔名,r+代表可以讀寫檔案 */ FILE *fp = fopen("test.txt", "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; } //memset(buffer2,0,sizeof(buffer2)); strcpy(buffer2, "=311"); /*strcat(buffer1, "=");*/ strcat(buffer1, buffer2); printf("%d\n",strlen(buffer1)); /* * 寫檔案,存入所需的內容 */ fprintf(fp, "%s", buffer1); fclose(fp); return; } } return 0; }
3、C 語言讀寫配置檔案
/* * File: read and write ConfigFile * Author:aniu12<[email protected]> * Date: 2014.02.13 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #define FILE_NAME "./sound.ini" #define READ_MODE "r+" #define BUFFER_SIZE 38 #define BUFFER_NUM 2 #define SPK_KW "spk" #define MIC_KW "mic" int Write_Line_Data ( char *path, int data, unsigned char *keyword ) { /* *linebuffer:讀取檔案中的一行存入的緩衝 *buffer1:一行中第一個欄位的存入緩衝 *buffer2:一行中第二個欄位的存入緩衝 */ char linebuffer[BUFFER_SIZE] = {0}; char buffer1[BUFFER_SIZE] = {0}; char buffer2[BUFFER_SIZE] = {0}; char save[BUFFER_NUM][BUFFER_SIZE]; int i=0; int j=0; int k=0; memset ( save, 0, sizeof(save) ); /* * FILE_NAME是檔名,r+代表可以讀寫檔案 */ FILE *fp = fopen ( path, READ_MODE ); if ( fp == NULL ) { printf ( "open error" ); return -1; } /* * 複製檔案內容到快取陣列save[][]中 */ while ( fgets(save[i], BUFFER_SIZE, fp) ) { i++; } fseek ( fp,0,SEEK_SET );//重新定位到檔案開始處 while(fgets(linebuffer, BUFFER_SIZE, fp)) { k++; /* * 在檔案中查詢符合條件的那一行內容,並記錄當前行數 */ sscanf ( linebuffer, "%[^=]=%[^=]", buffer1, buffer2 ); if ( !strcmp (keyword, buffer1) ) { k--; break; } } /* * 將要修改的內容寫入快取中 */ sprintf ( buffer2, "%d", data );//將整數轉換成字串 buffer2[strlen(buffer2)] = '\n'; buffer1[strlen(buffer1)] = '='; strcat(buffer1, buffer2); strncpy(save[k],buffer1,BUFFER_SIZE); /* * 清空檔案內容 */ fseek(fp,0,SEEK_SET); truncate("./test.txt",0);//clean test.txt /* * 將快取中的資料按行寫入檔案中 */ fseek(fp,0,SEEK_SET); for(j=0;j<i;j++) { fwrite(save[j],strlen(save[j]),1,fp); } fclose(fp); return 0; } void String_Isdigit(char *src, char *dst) { int i = 0; while ( src[i] != '\0' ) { if (isdigit(src[i])) dst[i] = src[i]; else dst[i] = ' '; ++i; } dst[i] = '\0'; } int Read_Line_Data ( char *path, int data, char *keyword ) { /* *linebuffer:讀取檔案中的一行存入的緩衝 *buffer1:一行中第一個欄位的存入緩衝 *buffer2:一行中第二個欄位的存入緩衝 */ char linebuffer[BUFFER_SIZE] = {0}; char buffer1[BUFFER_SIZE] = {0}; char buffer2[BUFFER_SIZE] = {0}; /* * FILE_NAME是檔名,r+代表可以讀寫檔案 */ FILE *fp = fopen(path, READ_MODE); if ( fp == NULL ) { printf ( "open error" ); return -1; } while(fgets(linebuffer, BUFFER_SIZE, fp)) { /* * 在檔案中查詢符合條件的那一行內容 */ sscanf ( linebuffer, "%[^=]=%[^=]", buffer1, buffer2 ); if ( !strcmp (keyword, buffer1) ) { break; } } /* * 將要修改的內容寫入快取中 */ memset ( buffer1, 0, sizeof(buffer1) ); String_Isdigit (buffer2,buffer1 ); sscanf ( buffer1, "%d", &data ); printf("%s=%d\n", keyword, data); fclose(fp); return 0; } int main ( int argc, char **argv ) { int mic_data = 0; int spk_data = 0; if ( argc <3 ) { printf("It need 3 params!\n"); return -1; } mic_data = atoi ( argv[2] ); spk_data = atoi ( argv[1] ); Write_Line_Data ( FILE_NAME, spk_data, SPK_KW ); Write_Line_Data ( FILE_NAME, mic_data, MIC_KW ); Read_Line_Data ( FILE_NAME, spk_data, SPK_KW ); Read_Line_Data ( FILE_NAME, mic_data, MIC_KW ); return 0; }
sound.ini
spk=122
mic=335
相關推薦
linux C 修改文字檔案中指定行的內容
1、可隨意修改內容 /* * Author:aniu12<[email protected]> * Date: 2014.02.13 */ #include<stdio.h> #include<stdlib.h> #in
MFC中修改CStdioFile檔案中指定行
程式不復雜,所以在這裡只敘述一下實現的過程。 (1)先定義一個CStringList strText變數,將CStdioFile檔案中的資料逐行讀入strText中。 (2)刪除strText指定行,用修改後的資料重新寫入strText。 (3)最後將strText中資料
shell指令碼抽取文字檔案中指定字串的方法:sed+grep方法、awk+grep方法(必要時可以聯合sed以及grep)、grep+cut方法
在linux中經常要對一些動態的文字檔案抽取指定的字串,比如執行ps命令後想要獲取指定的執行程序(如ps自己)的PID號(同一個程序每次啟動的時候pid號是隨機分配的)。該怎麼辦呢?當然,可以用一些擷取字串的方法,這裡介紹一下用2種方法來解決這類問題。 一、sed+grep方法: 首先大概瞭
c語言刪除檔案的指定行,更新檔案
有時候我們需要刪除檔案的某一行,來更新檔案,在這我個人擴充套件了一個函式,以刪除指定條件的行。 1 static void UpdateHistoryFile(void) 2 { 3 FILE *fin,*fout; 4 int counter = 1; 5 STes
用批處理實現文字檔案中指定字串的替換 zz
我沒注意到“cmd /v:on /c”,抱歉。但是還有問題,被替換的文字在行尾多了許多的空格,原因是echo !TMP:%SCONTENT%=%DCONTENT%! >> %TMPFILE%這條語句的">>"前多了不必要的空格。檔名帶空格的問題容易解決,下面是我修改過的:@echo o
使用Python刪除文字檔案中的部分內容
為了學習英語,我把從網上下載下來的電影轉換成純MP3檔案,放到iTouch裡去了,這樣就可以直接練習聽力了,另外把下載下來的字幕也放進去,聽不懂的時候可以看,但有一個問題,網上載下來的字幕格式都如下所示: 7 00:01:44,789 --> 00:01:51,019
Java 替換資料夾下所有檔案中指定的內容
我的上一篇部落格提到了找到檔案中的中文。之前的程式碼還可以做一個擴充套件。可以作為一個強大的查詢功能使用。關鍵字查詢,這個功能大家可以思考一下,今後我的部落格也會去貼上這樣的關鍵字查詢的功能的程式碼,能跟大家討論分析一下。 今天的替換的功能也是基於上篇
替換檔案中指定的內容並儲存之sed命令
常用選項:-n∶使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到螢幕上。但如果加上 -n 引數後,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。 -e∶直接在指令列模式上進行 sed 的動作編輯; -f∶
linux c刪除檔案中指定內容行或指定行
用C語言來操作檔案內容還是有點煩的(尤其是刪除內容,或者是修改非等長度的內容),沒有現成的API呼叫,只能自己手動寫; 網上查了下資料基本就兩個方案: 1、增加個臨時檔案;把原始檔內容逐個位元組或者逐行讀取出來,然後修改或者丟棄,放到臨時檔案中,當把原始檔中所有內容過濾後,
linux檔案操作—獲取文字中指定行的內容
1、用fgets函式可以讀取檔案中某行的資料,某列資料就必須一個一個讀入每行的第幾個字元,再存入到一個字串當中。 2、使用strncpy函式取指定行的某一段 char * strncpy(char *s1,char *s2,size_t n); 將字串s2中最多n
C#:讀取html模板檔案,並替換修改檔案中指定值,儲存為修改後的檔案
1.準備html模板檔案:Pages/Device/DeviceModel8.html 2 using System.IO:讀取檔案內容,並替換指定內容 &nbs
java檔案操作 (1)——判別指定檔案是否存在,讀取檔案修改時間和大小,讀取文字檔案內容,向文字檔案中寫入指定內容
任務要求: 完成一個java application應用程式,判別指定路徑下指定檔名的檔案是否存在。 如果指定檔案存在,讀取並分別顯示其修改時間和檔案大小等屬性。 以文字方式開啟某一指定路徑指定檔名的文字檔案,讀取其內容並顯示。 以文字方式向某
linux中如何將大檔案按照指定行數分割成多個小檔案?
將一個大檔案分成若干個小檔案方法例如將一個BLM.txt檔案分成字首為 BLM_ 的1000個小檔案,字尾為係數形式,且字尾為4位數字形式先利用wc -l BLM.txt 讀出 BLM.txt 檔案一共有多少行再利用 split 命令split -l 2482 .
Python修改檔案往指定行插入內容
需求:批量修改py檔案中的類屬性,為類增加一個core = True新的屬性 原py檔案如下 a.py class A(): description = "abc" 現在有一個1.txt文字,內容如下,如果有py檔案中的description跟txt文字中的一樣,則增加
獲取指定目錄下,指定副檔名的檔案(包含子目錄中的),把這些檔案的絕對路徑寫入到一個文字檔案中。
題目: 獲取指定目錄下,指定副檔名的檔案(包含子目錄中的),把這些檔案的絕對路徑寫入到一個文字檔案中。 思路: 1.必須深度遍歷 2.要在遍歷的過程中進行過濾,將符合條件的內容儲存到容器中 3.對容器中的內容進行遍歷並將絕對路徑寫入到檔案中 程式碼: import java.io
Linux c : 遍歷並刪除指定目錄下的所有檔案
系統:ubuntu17.10 遍歷並刪除指定目錄下的所有檔案 #include <dirent.h> #include <stdio.h> #include <string.h> int main() { &
.net C# web程式執行中錯誤日誌寫入文字檔案中
網上找的原始碼,自己根據實際情況進行了修改,能將日誌儲存在發不出來的web程式根目錄下的ErrorLog資料夾內。 #region 建立錯誤日誌 ///-------------------------------------
C#程式中:如何修改xml檔案中的節點(資料)(
要想在web等程式中實現動態的資料內容給新(如網頁中的Flash),不會更新xml檔案中的節點(資料)是遠遠不夠的,今天在這裡說一個簡單的xml檔案的更新,方法比較基礎,很適合初學者看的,保證一看就懂! ------------------程式環境下xml檔案中的節點、元
如何用python讀取文字中指定行的內容
1 利用python的readlines()函式: <strong><span style="font-size:24px;"> </span><span style="font-size:14px;">fobj = op
批處理替換文字檔案中的字串,並保留換行
@echo on REM --- File Name:ReplaceString.bat----- REM ---Call Method---- REM ---ReplaceString "SrcFileName" "TargetFileName" "SrcStr" "TargetStr" ---- s