C语言程序设计(第8章输入输出和文件系统)3
8.3文件系统应用实例
文件操作是程序设计中非常重要的技术。不同的文件数据格式决定了不同的文件操作方式。
【例8-10】我们需要同时处理三个文件。文件addr.txt记录了一些人的姓名和地址;文件tel.txt以不同的顺序记录了上述人员的姓名和电话号码。希望通过两个文件的对比,在第三个文件addrtel.txt中记录同一个人的姓名,地址,电话。先来看看前两个文件的内容:
typeaddr.txt
河界天京
李颖上海
黎明成都
王品渝。
type . txt
liying 12345
hejie 8764
wangpin 87643
liming 7654322
这两个文件的格式基本相同,姓名字段占14个字符,家庭住址或电话号码长度不超过14个字符。文件最后一行只有回车,也可以说是长度为0的字符串。在两个文件中,由于存储的是同一批人的数据,所以文件中的记录数量是相等的,只是存储顺序不同。我们可以使用任何文件记录作为基准,在另一个文件中顺序搜索同名的记录。如果找到,记录将被合并并存储在第三个文件中,搜索文件的指针将被移动到文件头,以便进行下一次顺序搜索。
# include
# include
# include
# include
main()
{
FILE * fptr 1,*fptr2,* fptr3/*定义文件指针*/
Chartemp [15],Temp1 [15],temp 2[15];
if((fptr 1 = fopen(" addr . txt "," r ")= = null)/*打开文件*/
{
printf("无法打开文件");
退出(0);
}
if((fptr 2 = fopen(" tel . txt "," r"))==NULL)
{
printf("无法打开文件");
退出(0);
}
if((fptr 3 = fopen(" addr tel . txt "," w"))==NULL)
{
printf("无法打开文件");
退出(0);
}
clrscr();/*清屏*/
while(strlen(fgets(temp 1,15,fptr1)) > 1)/*读取名称字段的长度大于1 */
{
fgets (temp2,15,fptr 1);/*读取地址*/
fputs(temp1,fptr 3);/*将名称写入合并文件*/
fputs(temp2,fptr 3);/*将地址写入合并文件*/
strcpy(temp,temp 1);/*保存姓名字段*/
do /*查找同名记录*/
{
FGETS (Temp1,15,fptr 2);
fgets(temp2,15,fptr 2);
}while(strcmp(temp,temp1)!=0);
倒带(fptr 2);/*将文件指针移动到文件头进行下一次搜索*/
fputs(temp2,fptr 3);/*将电话号码写入合并文件*/
}
fclose(fptr 1);/*关闭文件*/
fclose(fptr 2);
f close(fptr 3);
}
程序运行后,我们来看看合并文件addrtel.txt的内容:
typeaddrtel.txt。
0条评论