五,编写一个程序合并两个文件的数据并进行排序
硬盘中存有两个数据文件,data1.txt 和 data2.txt。
文件数据格式如下:item1:value1 item2:value2 item3:value3…item 和 value 均是整数。试编写程序,合并两个文件的数据到一个新文件 data.txt 中。
新文件中的 item 是原有文件的并集,按 item 值升序排序(注意原文件并不排序);新文件中的每个item 对应的 value 值是原文件相应 value 值的和。文件中,每 10 组数据换一行。
下面是一个简单例子
data1.txt1:34 18:23 44:54 198:22 12:23 33:23 134:11
data2.txt18:22 12:11 5:12 6:6 35:12 145:165 20:12 198:28
合并输出文件 data.txt 的内容应该是:
1:34 5:12 6:6 12:34 18:45 20:12 33:23 35:12 44:54 134:11145:165 198:50
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 7
struct date
{
int item;
char c;
int value;
}date1[N], date2[N], date[2 * N];
void main()
{
FILE *fp1, *fp2;
if ((fp1 = fopen("D:\\date1.txt", "r")) == NULL)
{
printf("无法正常打开\n");
exit(0);
}
int i = 0, j, n = 0;
while ((fscanf(fp1, "%d %c %d", &date1[i].item, &date1[i].c, &date1[i].value)) != EOF)
i++;
if ((fp2 = fopen("D:\\date2.txt", "r")) == NULL)
{
printf("无法正常打开\n");
exit(0);
}
i = 0;
while ((fscanf(fp2, "%d %c %d", &date[i].item, &date[i].c, &date[i].value)) != EOF)
i++;
for (i = 0; i < N; i++)
{
for (j = 0; j < N + n; j++)
{
if (date1[i].item == date[j].item)date[j].value += date1[i].value;
continue;
}
if (j >= N + n)
date[N - 1 + n] = date1[i];
n++;
}
for (i = 0; i < N + n - 1; i++)
{
for (j = 0; j < N - 1 - i; j++)
{
if (date[j].item > date[j + 1].item)
date2[0] = date[j + 1];
date[j + 1] = date[j];
date[j] = date2[0];
}
}
fclose(fp1);
fclose(fp2);
if ((fp2 = fopen("D:\\date.txt", "w")) == NULL)
{
printf("无法正常打开\n");
exit(0);
}
for (i = 0; i < N + n; i++)
{
fprintf(fp2, "%d%c%d", date[i].item, date[i].c, date[i].value);
printf("%d%c%d", date[i].item, date[i].c, date[i].value);
printf(" ");
}
fclose(fp2);
system("pause");
}
不足之处,请多指教!