社区
C语言
帖子详情
请帮忙,如何把文件内容读取后存入数组
huoleifeng
2007-07-03 04:18:46
typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;
STUDENT students[50]
如何把结构如下的文件中的数据读取后存入数组?
[第一名]
姓名=***;
性别=***;
年龄=***;
[第二名]
姓名=***;
性别=***;
年龄=***;
.
.
.
希望能给出源代码,一定要C语言的,谢谢!!!
...全文
356
9
打赏
收藏
请帮忙,如何把文件内容读取后存入数组
typedef struct student { char name[10]; char gender[4]; int age; }STUDENT; STUDENT students[50] 如何把结构如下的文件中的数据读取后存入数组? [第一名] 姓名=***; 性别=***; 年龄=***; [第二名] 姓名=***; 性别=***; 年龄=***; . . . 希望能给出源代码,一定要C语言的,谢谢!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
星羽
2007-07-10
打赏
举报
回复
ding
ffll8281
2007-07-10
打赏
举报
回复
楼上,你的readini函数没有读懂啊,可否加上注释
gxlian
2007-07-04
打赏
举报
回复
以上两种都可,已测试!
gxlian
2007-07-04
打赏
举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;
STUDENT students[50];
int readspace(FILE* tempfp)
{
char ch;
ch = getc(tempfp);
while(ch == ' ' || ch == '\n')
{
ch = getc(tempfp);
}
if(ch == EOF)
return 0;
fseek(tempfp,-1L,1);
return 1;
}
void main()
{
FILE *fp;
if((fp = fopen("student.txt","r")) == NULL)
{
printf("Can't open student.txt.\n");
exit(-1);
}
char order[50][3];
int exitflag;
int i = 0;
while(!feof(fp))
{
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"[第%s",order[i]);
if(exitflag == 0)
break;
int orderlenth = strlen(order[i]) - strlen("名]");
order[i][orderlenth] = '\0';
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"姓名=%s",students[i].name);
if(exitflag == 0)
break;
int namelenth = strlen(students[i].name)-1;
(students[i].name)[namelenth] = '\0';
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"性别=%s",students[i].gender);
if(exitflag == 0)
break;
int genlenth = strlen(students[i].gender)-1;
(students[i].gender)[genlenth] = '\0';
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"年龄=%d;",&students[i].age);
if(exitflag == 0)
break;
i++;
}
//test result
for(int j = 0; j < i; j++)
{
printf("第%s名: %s %s %d\n",order[j],students[j].name,students[j].gender,students[j].age);
}
fclose(fp);
}
gxlian
2007-07-04
打赏
举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;
STUDENT students[50];
int readspace(FILE* tempfp)
{
char ch;
ch = getc(tempfp);
while(ch == ' ' || ch == '\n')
{
ch = getc(tempfp);
}
if(ch == EOF)
return 0;
fseek(tempfp,-1L,1);
return 1;
}
void main()
{
FILE *fp;
if((fp = fopen("student.txt","r")) == NULL)
{
printf("Can't open student.txt.\n");
exit(-1);
}
int order = 0;
int exitflag;
while(!feof(fp))
{
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"[第%d名]",&order);
if(exitflag == 0)
break;
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"姓名=%s",students[order].name);
if(exitflag == 0)
break;
int namelenth = strlen(students[order].name)-1;
(students[order].name)[namelenth] = '\0';
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"性别=%s",students[order].gender);
if(exitflag == 0)
break;
int genlenth = strlen(students[order].gender)-1;
(students[order].gender)[genlenth] = '\0';
exitflag = readspace(fp);
if(exitflag == 0)
break;
exitflag = fscanf(fp,"年龄=%d;",&students[order].age);
if(exitflag == 0)
break;
}
//test result
for(int i = 1; i < 50; i++)
{
printf("第%d名: %s %s %d\n",i,students[i].name,students[i].gender,students[i].age);
}
fclose(fp);
}
believefym
2007-07-03
打赏
举报
回复
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;
STUDENT students[50];
int main()
{
FILE* pf = fopen("g:\\c\\TextFile1.txt","r");
char t1[80]={0};
char name[80]={0};
char gender[80]={0};
char age[80]={0};
int i=0;
int ln = strlen("姓名=");
int lg = strlen("性别=");
int la = strlen("年龄=");
while (fscanf(pf,"%s",t1)!=EOF)
{
fscanf(pf,"%s%s%s",name,gender,age);
strncpy(students[i].name,name+ln,strlen(name)-ln-1);
strncpy(students[i].gender,gender+lg,strlen(gender)-lg-1);
char aget[10]={0};
strncpy(aget,age+la,strlen(age)-la-1);
students[i].age = atoi(aget);
printf("%d\tname:%s\tgender:%s\tage:%d\n",i,students[i].name,students[i].gender,students[i].age);
++i;
}
fclose(pf);
system("pause");
return 0;
}
cceczjxy
2007-07-03
打赏
举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
char name[10];
char gender[4];
int age;
}STUDENT;
STUDENT students[50];
void cut(char *tmp)
{
if(tmp==NULL)return;
while(*tmp)
if(*tmp=='\n'||*tmp=='\r')
{
*tmp=0;
return ;
}
else tmp++;
}
void readini(FILE *file,char *group,char *member,char *values)
{
char buf[128],tmpbuf1[128],tmpbuf2[128],*p1;
int len=0,flag=0;
memset(buf,0,128);
rewind(file); //
while(fgets(buf,128,file))
{
p1=buf;
cut(buf);
if(strcmp(buf,group)==0){flag=1;continue;}//
if(flag)
{
if((strlen(buf)==0)||(*p1=='['))
{
values=NULL;
break;
}//
len=strcspn(buf,"="); //
memset(tmpbuf1,0,128);
memset(tmpbuf2,0,128);
strncpy(tmpbuf1,buf,len);
p1+=len;
p1++;
if(strcmp(tmpbuf1,member)==0)
{
strcpy(values,p1);
break;
}//
}
memset(buf,0,128);
}
cut(values);
}
int main()
{
char buf[128],temp[32];
FILE *file;
int i;
file=fopen("file.txt","r");
for(i=1;i<50;i++)
{
memset(temp,0,sizeof(temp));
sprintf(temp,"[第%d名]",i);//怎么循环汉字,你自己想想吧,我没想好
memset(buf,0,sizeof(buf));
readini(file,temp,"姓名",buf);
strcpy(students[i].name,buf);
memset(buf,0,sizeof(buf));
readini(file,temp,"性别",buf);
strcpy(students[i].gender,buf);
memset(buf,0,sizeof(buf));
readini(file,temp,"年龄",buf);
students[i].age=atoi(buf);
}
fclose(file);
}
neosu
2007-07-03
打赏
举报
回复
使用FILE * fp = fopen(文件名, "r"); 打开文件
使用fgets一行行提取文本
判断文本的特征匹配到你的变量。
jixingzhong
2007-07-03
打赏
举报
回复
读取后一个一个赋值
c语言结构体数组存入
文件
_关于从
文件
中
读取
数据并写入结构体数组
已结贴√问题点数:25回复次数:10 关于从
文件
中
读取
数据并写入结构体数组各位大大好,本人新手一枚,最近写简单的通讯录的c程序,其他功能完好,最后一个将txt
文件
中的数据写入结构体数组的函数无法正常使用。...
numpy--
读取
CSV,一维数组转二维数组并写入Excel
文件
中
利用python的numpy框架,将CSV
文件
中的数据
读取
出来,整合到二维数组中,并写入Excel
文件
中。定义一个大小12的一维数组,再reshape转换成3行4列的矩阵。相同原理:自定义一个大小为6的一维数组 ,再转换。2.1导入...
python
读取
大文本
文件
并存入numpy时过于费时的问题及猜测
因需要
读取
大文本
文件
(约有1,300,000行,40兆),并简单处理存入numpy数组中,运行过程中发现随
读取
数据的增加,耗费时间显著增加,稍作修改后运行速度显著提升,不解,记之,希望大家
帮忙
解惑。 初步猜测(未验证...
C#
读取
csv数据
最近忙的一个项目中有对csv数据的操作,主要是读的问题,以为很简单,不就是数据按行
读取
后,用逗号来分隔吗! 刚开始确实也是这么做的,直到遇到了单元格中含有逗号的情况,就懵逼了。 举个栗子: 有这么一个...
c#逐行
读取
txt文本,但是每一行里面数据之间空格数量不同,如何解决??
以下是一个简单的示例,演示如何逐行
读取
文本
文件
,并将每行数据分割后存储到数组中: using System; using System.IO; using System.Collections.Generic; class Program { static void Main() { // 指定文本
文件
...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章