C語言讀取一行TXT文件 && 修改TXT中的內容

今天在工作中遇到一些問題。
事情是這樣的,給出一個TXT文本文件,裏面存儲的有多條數據,將數據插入數據庫。
每條數據的格式:
BH001;屬性1;屬性2;屬性3;屬性4;屬性5;
但是給出的文檔有問題,會有多出換行的數據,無法正確插入
BH001;屬性1;屬性2;
屬性3;屬性4;屬性5;





一共幾十萬條數據,那我就不可能一個個去找,這時我發現每條屬性的開頭都是B,那麼我就可以用C語言讀取每一行的數據,判斷第一個字符是不是B,如果不是,把這個行數輸出出來,然後可以在TXT中編輯->轉到輸入行數修改即可。

#include <stdio.h>
int main() {
   
   
	FILE *fp;
	fp=fopen("C:\\Users\\Lenovo\\Desktop\\a.txt","r");  
	int i = 0;
	char str[1000];
	while(fgets(str, 500, (FILE*)fp)!=NULL) {
   
   
		i++;
		if(str[0]!='B') {
   
   
			printf("%d\n", i);
			i--;
		}
	}
	fclose(fp);
} 

但是算出來有問題的數據也有幾百條,一條條改也是比較費時間的。那我就先把有問題的數據線存儲到一個txt中。

#include <stdio.h>
int main() {
   
   
	FILE *fp, *fp1;
	fp=fopen("C:\\Users\\Lenovo\\Desktop\\a.txt","r");  
	fp1=fopen("C:\\Users\\Lenovo\\Desktop\\index.txt", "w");
	int i = 0;
	char str[1000];
	while(fgets(str, 500, (FILE*)fp)!=NULL) {
   
   
		i++;
		if(str[0]!='B') {
   
   
			printf("%d\n", i);
			fprintf(fp1, "%d\n", i-1);
			i--;
		}
	}
	fclose(fp);
	fclose(fp1);
} 

然後我在網上查了一下,修改TXT中的內容的話可以先創建一個TXT,將新改的內容插入這個新的TXT中。
對於有問題的行數,我可以一次讀兩行,把前一行的換行去掉,然後插入到新的TXT中,就能解決問題了。

#include <stdio.h>
#include <string.h>
int main() {
   
   
	FILE *fp, *fp1, *fp2;
	fp=fopen("C:\\Users\\Lenovo\\Desktop\\a.txt", "r");
	fp1=fopen("C:\\Users\\Lenovo\\Desktop\\index.txt", "r");
	fp2=fopen("C:\\Users\\Lenovo\\Desktop\\a1.txt", "w");
	
	//用來存儲出問題的行數 
	int index[1020];
	int length=0;
	//將出問題的行數讀取出來 
	while(fscanf(fp1, "%d", &index[length])!=EOF)
		length++;
	//末尾設置爲無限大,直到所有的數據都讀取完 
	index[length]=99999999;
	
	char str[1020], str1[1020];
	int i=0, j=0;
	while(fgets(str, 500, (FILE*)fp)!=NULL) {
   
   
		i++;
		//比較當前行數和出問題的行數是否相等 
		while(i==index[j]) {
   
   
			fgets(str1, 500, (FILE*)fp);
			int len = strlen(str);
			//將前一行數據的換行去除 
			str[len-1]='\0';
			//拼接兩個字符串 
			strcat(str, str1);
			j++;
		}
		fprintf(fp2, "%s", str);
	}
	fclose(fp);
	fclose(fp1);
	fclose(fp2);
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章