今天在作業中遇到一些問題,
事情是這樣的,給出一個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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/239554.html
標籤:其他
