文件操作在程序设计中是非常重要的技术,文件的数据格式不同,决定了对文件操作方
式的不同。
[例8-10]我们需要同时处理三个文件。文件addr.txt记录了某些人的姓名和地址;文件
tel.txt记录了顺序不同的上述人的姓名与电话号码。希望通过对比两个文件,将同一人的姓名、
地址和电话号码记录到第三个文件addrtel.txt。首先看一下前两个文件的内容:
typeaddr.txt
hejietianjing
liyingshanghai
limingchengdu
wangpinchongqing
typetel.txt¿
liying12345
hejie8764
wangpin87643
liming7654322
这两个文件格式基本一致,姓名字段占14个字符,家庭住址或电话号码长度不超过14个
字符,并以回车结束。文件结束的最后一行只有回车符,也可以说是长度为0的串。在两个文
件中,由于存放的是同一批人的资料,则文件的记录数是相等的,但存放顺序不同。我们可
以任一文件记录为基准,在另一文件中顺序查找相同姓名的记录,若找到,则合并记录存入第三个文件,将查找文件的指针移到文件头,以备下一次顺序查找。 财 软联盟 fs119.net
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
main()
{
FILE*fptr1,*fptr2,*fptr3;/*定义文件指针*/
chartemp[15],temp1[15],temp2[15];
if((fptr1=fopen("addr.txt","r"))==NULL)/*打开文件*/
{
printf("cannotopenfile");
exit(0);
}
if((fptr2=fopen("tel.txt","r"))==NULL)
{
printf("cannotopenfile");
exit(0);
}
if((fptr3=fopen("addrtel.txt","w"))==NULL)
{
printf("cannotopenfile");
exit(0);
}
clrscr();/*清屏幕*/
while(strlen(fgets(temp1,15,fptr1))>1)读/回*的姓名字段长度大于1*/
{
fgets(temp2,15,fptr1);/*读地址*/
fputs(temp1,fptr3);/*写入姓名到合并文件*/
fputs(temp2,fptr3);/*写入地址到合并文件*/
strcpy(temp,temp1);/*保存姓名字段*/
do/*查找姓名相同的记录*/
{
fgets(temp1,15,fptr2);
fgets(temp2,15,fptr2);
}while(strcmp(temp,temp1)!=0);
rewind(fptr2);/*将文件指针移到文件头,以备下次查找*/
fputs(temp2,fptr3);/*将电话号码写入合并文件*/
}
fclose(fptr1);/*关闭文件*/
fclose(fptr2);
fclose(fptr3);
}
程序运行后,我们来看一下合并后的文件addrtel.txt的内容:
typeaddrtel.txt
hejietianjing
8764
liyingshanghai
12345
limingchengdu
7654322
wangpinchongqing
87643
式的不同。
[例8-10]我们需要同时处理三个文件。文件addr.txt记录了某些人的姓名和地址;文件
tel.txt记录了顺序不同的上述人的姓名与电话号码。希望通过对比两个文件,将同一人的姓名、
地址和电话号码记录到第三个文件addrtel.txt。首先看一下前两个文件的内容:
typeaddr.txt
hejietianjing
liyingshanghai
limingchengdu
wangpinchongqing
typetel.txt¿
liying12345
hejie8764
wangpin87643
liming7654322
这两个文件格式基本一致,姓名字段占14个字符,家庭住址或电话号码长度不超过14个
字符,并以回车结束。文件结束的最后一行只有回车符,也可以说是长度为0的串。在两个文
件中,由于存放的是同一批人的资料,则文件的记录数是相等的,但存放顺序不同。我们可
以任一文件记录为基准,在另一文件中顺序查找相同姓名的记录,若找到,则合并记录存入第三个文件,将查找文件的指针移到文件头,以备下一次顺序查找。 财 软联盟 fs119.net
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
main()
{
FILE*fptr1,*fptr2,*fptr3;/*定义文件指针*/
chartemp[15],temp1[15],temp2[15];
if((fptr1=fopen("addr.txt","r"))==NULL)/*打开文件*/
{
printf("cannotopenfile");
exit(0);
}
if((fptr2=fopen("tel.txt","r"))==NULL)
{
printf("cannotopenfile");
exit(0);
}
if((fptr3=fopen("addrtel.txt","w"))==NULL)
{
printf("cannotopenfile");
exit(0);
}
clrscr();/*清屏幕*/
while(strlen(fgets(temp1,15,fptr1))>1)读/回*的姓名字段长度大于1*/
{
fgets(temp2,15,fptr1);/*读地址*/
fputs(temp1,fptr3);/*写入姓名到合并文件*/
fputs(temp2,fptr3);/*写入地址到合并文件*/
strcpy(temp,temp1);/*保存姓名字段*/
do/*查找姓名相同的记录*/
{
fgets(temp1,15,fptr2);
fgets(temp2,15,fptr2);
}while(strcmp(temp,temp1)!=0);
rewind(fptr2);/*将文件指针移到文件头,以备下次查找*/
fputs(temp2,fptr3);/*将电话号码写入合并文件*/
财管家园.fs119.net
}
fclose(fptr1);/*关闭文件*/
fclose(fptr2);
fclose(fptr3);
}
程序运行后,我们来看一下合并后的文件addrtel.txt的内容:
typeaddrtel.txt
hejietianjing
8764
liyingshanghai
12345
limingchengdu
7654322
wangpinchongqing
87643
财软联盟 fs119.net
相关文章
C语言的预处理程序与注释 C语言程序应用举例 一维数组 二维数组 多维数组 数组的初始化 指针与指针变量 指针变量的定义与引用 指针运算符与指针表达式 指针与数组 指针的地址分配 指针数组 指向指针的指针 main函数的参数 结构体类型变量的定义和引用 结构体数组的定义和引用 链表的建立、插入和删除 共用体 缓冲文件系统 非缓冲文件系统 C语言文件系统应用举例 C语言入门必备手册 用户的第一个C程序 C语言入门之数据类型(1)
Google.cn搜索关键字:
举例 应用 系统 文件 语言 记录 姓名 查找 合并 电话号码
Google.cn搜索相关文章:
谷歌中搜索全球网 C语言文件系统应用举例
百度中搜索 C语言文件系统应用举例
谷歌中搜索www.fs119.net C语言文件系统应用举例
上一篇:C语言入门必备手册
Google.cn搜索相关文章:
谷歌中搜索全球网 C语言文件系统应用举例
百度中搜索 C语言文件系统应用举例
谷歌中搜索www.fs119.net C语言文件系统应用举例
下一篇:非缓冲文件系统
精品课程推荐
热点专题
最新主题
推荐大折扣培训课程