早教吧 育儿知识 作业答案 考试题库 百科 知识分享

C语言进行特定格式文本文件的筛选与判断9300100,109300101,109300102,109300110,109300111,109301110,209301111,209301112,20某文本文件中内容如上,每行2列数字,当某些行第一列数字满足(1)前六位相同(2

题目详情
C语言进行特定格式文本文件的筛选与判断
9300100,10
9300101,10
9300102,10
9300110,10
9300111,10
9301110,20
9301111,20
9301112,20
某文本文件中内容如上,每行2列数字,当某些行第一列数字满足(1)前六位相同 (2)第7位数字从0~2均出现,则把这些行合并为一行,第一列数字为前6位,如上述行合并为两行
930010,10
930111,20,请问如何实现?(用其他语言亦可)
不满足上述条件的行被丢弃,满足条件的行实行合并
▼优质解答
答案和解析

/*

原始数据:

9300100 10

9300101 10

9300102 10

9300110 10

9300111 10

9301110 20

9301111 20

9301112 20

处理后数据:

930010  10

930011  10

930111  20

Press any key to continue

*/

#include <stdio.h>
#define N 60
int main() {
int i,j,n,k,flag,data1[N],data2[N];
FILE *fp = fopen("indata.txt","rt");
if(fp == NULL) {
printf("无法打开数据文件。");
return 1;
}
printf("原始数据:");
for(n = 0; !feof(fp) && n < N; ++n) {
fscanf(fp,"%d,%d",&data1[n],&data2[n]);
printf("%d    %d",data1[n],data2[n]);
data1[n] /= 10; // 去除末位
}
fclose(fp);
for(i = 0; i < n - 1; ++i) {
flag = 0;
for(j = i + 1; j < n; ++j) {
if(data1[j] == data1[i] && data2[j] == data2[i]) {
for(k = j; k < n - 1; ++k) {
data1[k] = data1[k + 1];
data2[k] = data2[k + 1];
}
--n;
flag = 1;
}
}
if(flag) --i;
}
printf("处理后数据:");
for(i = 0; i < n; ++i)
printf("%d    %d",data1[i],data2[i]);
return 0;
}