| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3774 人关注过本帖, 1 人收藏
标题:[求助]关于C语言对文件的操作 ,如何从文件中检索有用信息
只看楼主 加入收藏
沙漠里的骆驼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-26
收藏(1)
 问题点数:0 回复次数:6 
[求助]关于C语言对文件的操作 ,如何从文件中检索有用信息
我想从以下数据中检索出成绩大于60的学生的学号
以下信息是放在文件data.txt中的,见附件
data.txt的内容如下:
学号 成绩
101 45
105 100
189 99
109 13
110 60
108 77
117 68
99 25
255 65
102 100
nKmqjOkI.txt (136 Bytes) [求助]关于C语言对文件的操作 ,如何从文件中检索有用信息


我知道应该先从文件中把这些数据读出来,到底是读到数组中呢
还是读到结构体中呢?读到结构体中又怎样读呢?
我应经查了好多关于文件操作的资料了,可是还是没有解决,
希望各位大虾能指点一下!!
先谢谢了

2jBmpmDs.txt (136 Bytes) [求助]关于C语言对文件的操作 ,如何从文件中检索有用信息

搜索更多相关主题的帖子: 文件中 C语言 有用信息 检索 学号 
2007-09-19 10:25
無邪的睡脸
Rank: 2
等 级:等待验证会员
威 望:1
帖 子:344
专家分:13
注 册:2007-9-11
收藏
得分:0 
我昨天也写了个,不过是从二进制文件中读出,用fread读出存放在一个结构体中。文本方式还真不知道怎么读出
2007-09-19 11:07
沙漠里的骆驼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-26
收藏
得分:0 
二进制也行,你能不能将你的代码让我看看,对了要有你处理的
数据,谢谢
2007-09-19 11:26
無邪的睡脸
Rank: 2
等 级:等待验证会员
威 望:1
帖 子:344
专家分:13
注 册:2007-9-11
收藏
得分:0 
题目:输入三个学生的数据存入文件,然后从文件中读出;
#include <stdio.h>
struct student
{
char name[10];
int age;
long num;
}s[3],t;
int main()
{
FILE *fp;
int i;
if((fp=fopen("d:\\student.txt","wb"))==NULL)
{
printf("Erroor opening file d:\\student.txt\n");
exit(1);
}
for(i=0;i<3;i++)
{
printf("Input name:");
scanf("%s",s[i].name);
printf("Input age:");
scanf("%d",&s[i].age);
printf("Input number:");
scanf("%ld",&s[i].num);
}
if(fwrite(s,sizeof(struct student),3,fp)!=3)
{
printf("Erroe writing file d:\\student.txt\n");
exit(1);
}
fclose(fp);
if((fp=fopen("d:\\student.txt","rb"))==NULL)
{
printf("Erroor opening file d:\\student.txt\n");
exit(1);
}
i=0;
while(fread(&t,sizeof(struct student),1,fp)==1)
{
i++;
printf("the %dth student:\n",i);
printf("name:%s\n",t.name);
printf("age:%d\n",t.age);
printf("number:%ld\n",t.num);
}
fclose(fp);
return 0;
}
将学生数据改成学号和成绩,输出时if语句来控制,应该就可以了吧!
2007-09-19 12:40
沙漠里的骆驼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-26
收藏
得分:0 

谢谢,不过你可能误解我的意思了,我的数据不是通过程序输入的,
是原来就有的,我写程序的目的就在于处理这些数据 ,如果数据很多
的话,通过一个个输入是解决不了问题的,再次感谢您的关注和帮助 !
不过我已经解决了,程序如下::
//================================================================
//程序名:data0101.c
//编程者:tinghua 沙漠里的骆驼
//编程时间:2007-09-19 12:59
//MSN:zhangshengheng@hotmail.com
//程序功能:从文件中文本文件中读取数据见到数组中,
//具体是从data.txt中读数据,放在数组中,通过比较成绩,将成绩大
//于60的学生的学号给找出来了,并按照成绩大小排序,输出到data0101.txt中
//================================================================
#include<stdio.h>
#include<conio.h>
#include<process.h>
FILE *fp;
int buf[100][2];//定义缓冲区,存储从文件读出的数据
int data[50][2];//定义存放成绩大于60的学生的成绩

void display(int n,int x[][2])//显示函数
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<2;j++)
{
printf("%d ",x[i][j]);
if(j==1) printf("\n");
}
}
void read_file()//从文件中格式化读入数据子函数
{
int i;

if((fp=fopen("data.txt","r"))==NULL)//打开文件
{
printf("\nCannot open this file.press any key to exit!\n");
getch();
exit(1);
}
while(!feof(fp)) //从文件中格式化读入数据
{
for(i=0;i<10;i++)
fscanf(fp,"%d%d", &buf[i][0],&buf[i][1]);
}
printf("\n\nthe data.txt has been succeeded to read ,the data is:\n");

if(fclose(fp)!=0)//关闭文件
{
printf("\n the file cannot be closed!press any key to exit\n");
getch();
exit(1);
}

}

void write_file()//向文件中格式化写入数据子函数
{
int i,j;
if((fp=fopen("data0101.txt","w+"))==NULL)//打开文件
{
printf("\nCannot open this file.press any key to exit!\n");
getch();
exit(1);
}
for(i=0;i<7;i++)//格式化输出到文件
{
for(j=0;j<2;j++)
{
fprintf(fp,"%8d%7d",data[i][j]);
if(j==1) fprintf(fp,"\n");
}
}
if(fclose(fp)!=0)//关闭文件
{
printf("\n the file cannot be closed!press any key to exit\n");
getch();
exit(1);
}
}

int main(void)
{

int i,j=0;
display(10,buf);//显示子函数,将从文件中调入的数据显示出来

for(i=0;i<10;i++)//从读入的数据中选出成绩大于60的学生
{
if(buf[i][1]>=60)
{
data[j][1]=buf[i][1];
data[j][0]=buf[i][0];
j++;
}
}

printf("\n\nthe students whose score >60 are: \n");
display(j,data);//显示成绩大于60的学生

write_file();//将成绩大于60的学生写入文件

return 0;
}

2007-09-19 17:00
沙漠里的骆驼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-26
收藏
得分:0 

还有别人用结构体实现的程序:
#include <stdio.h>
#include <stdlib.h>

typedef struct _student
{
int id;
int score;
} Student;

int readData(Student** p, FILE* pf)
{
int n = 8, i = 0;
*p = (Student*)malloc(n * sizeof(Student));
while(fscanf(pf, "%d %d", &(*p)[i].id, &(*p)[i].score) != -1)
{
if(++i == n)
{
n <<= 1;
*p = (Student*)realloc(*p, n * sizeof(Student));
}
}
*p = (Student*)realloc(*p, i * sizeof(Student));
return i;
}

int main(void)
{
Student* pstu = 0;
int n = 0, i = 0;
FILE* pf = fopen("data.txt", "r");
if(!pf)
printf("error!\n");
else
{
n = readData(&pstu, pf);
for(i = 0; i < n; i++)
if(pstu[i].score > 60)
printf("id = %d\tscore = %d\n", pstu[i].id, pstu[i].score);
}
free(pf);
return 0;
}

2007-09-19 17:01
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

这里用的是结构数组,也可以用链表实现,方法很多就看你怎么用了

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

struct student{
char id[10];
float grade;
};

int print(struct student *stu,float grade,int n)
{
int i;
printf("%-10s%-7s","学号","成绩");
for(i=0;i<n;i++)
{
if(stu[i].grade>grade)
printf("\n%-10s%-7.2f",stu[i].id,stu[i].grade);
}
return 0;
}

int read(struct student *stu,char *FileName)
{
int len=0;
char buf[64];
FILE *fp;

if((fp=fopen(FileName,"r"))==NULL)
{
printf("打开文件%s失败!",FileName);
getch();
return -1;
}
memset(buf,0,sizeof(buf));
fgets(buf,64,fp);
memset(buf,0,sizeof(buf));
while(fgets(buf,64,fp))
{
strcpy(stu[len].id,strtok(buf," "));
stu[len].grade=(float)atof(strtok(NULL," "));
len++;
memset(buf,0,sizeof(buf));
}
fclose(fp);
return len;
}

int main()
{
int len;
char *FileName="data.txt";
struct student stu[500];

len=read(stu,FileName);
print(stu,60,len);
getch();
return 0;
}

[此贴子已经被作者于2007-9-19 17:40:39编辑过]


只有想不到,没有做不到
2007-09-19 17:32
快速回复:[求助]关于C语言对文件的操作 ,如何从文件中检索有用信息
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031117 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved