大家好,欢迎来到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