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;
} 
  • 65
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 42
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张宜强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值