C语言读取一行TXT文件 && 修改TXT中的内容[亲测有效]

C语言读取一行TXT文件 && 修改TXT中的内容[亲测有效]今天在工作中遇到一些问题。事情是这样的,给出一个TXT文本文件,里面存储的有多条数据,将数据插入数据库。每条数据的格式:`BH001;属性1;属性2;属性3;属性4;属性5;`但是给出的文档有问题,会有多出换行的数据,无法正确插入`BH001;属性1;属性2;“属性3;属性4;属性5;`

大家好,欢迎来到IT知识分享网。

今天在工作中遇到一些问题。
事情是这样的,给出一个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://yundeesoft.com/25204.html

(0)
上一篇 2023-07-30 15:33
下一篇 2023-08-02 17:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信