C语言编程,连接数据库有点麻烦,但测试总需要数据,使用手动输入的方式固然是可行的,但是在开发过程中难免会重复使用同样的数据进行测试,而且输入测试数据的过程中花费的时间会很多,所以我们要学会变通,通过读取文件的方式,我们就可以简便的实现获取测试数据集,而不用每次手动输入,大大节省了测试说花费的时间。
函数介绍:
ftell(文件名):获取当前文件指针所在位置
int fseek(FILE *stream, long offset, int fromwhere);fseek 用于二进制方式打开的文件,移动文件读写指针位置.
fseek(in,-1L,1);-- 文件流in, 零点为当前指针位置,SEEK_CUR 就是 1,-1L -- 文件指针回退1个字节int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
0代表从开始的位置开始,1代表从当前位置开始,2代表从文件最后开始
简言之:
fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
fscanf(文件名,类型,存储变量地址) :读取一个某种数据类型的内容
如:fscanf(fp,%d,&num)是从文件中当前位置读取一个整数,保存到变量num中
getc(文件名):从文件当前位置获取一个字符并返回
如:char c = getc(fp); 是从文件fp中读取一个字符保存在c中。
文件:job.xml 内容
JOB1,10:00,25,15,2JOB2,10:20,30,60,1JOB3,10:30,10,50,3JOB4,10:35,20,10,2JOB5,10:40,15,30,2
主函数
#include "stdio.h"#include "stdlib.h"#include "string.h"//作业typedef struct jcb{ char name[20]; //作业名称 char SubmitTime[10]; //到达时间 . int WholeTime; //运行所需时间 char startTime[10]; //开始执行时间 int memory ; //所需内存空间大小 int tapeDriverNum; //所需磁带机数量 struct jcb *link; //下一个指针}jcb;void showAllJob(jcb *jcbs){ jcb *t = jcbs; printf("作业名称 到达时间 估计运行时间 内存需要 磁带机需要n"); for(t=jcbs ; NULL!=t;t=t->link) { printf(" %s|t %s|t%d|t%d|t%dn",t->name,t->SubmitTime,t->WholeTime,t->memory,t->tapeDriverNum); }}void importData(){ FILE *fp = NULL; fp=fopen("job.xml","r"); jcb *job = NULL; jcb *q = NULL; jcb *p = NULL; long i =0; char t ; int j = 0; if(NULL == fp) { printf("n***t找不到文件n"); } else { fseek(fp,-6L,2);//获得最后一个位置 i = ftell(fp); fseek(fp,5L,0);//转到开始位置 while(i+13!=ftell(fp)) { p = (jcb *)malloc(sizeof(jcb)); p->link = NULL; t = getc(fp);//获得一个字符 j=0; //获取作业名称 while(',' != t) { p->name[j++] = t; t=getc(fp); } p->name[j] =' '; //获取到达时间 t= getc(fp); j = 0; while(',' != t) { p->SubmitTime[j++] = t; t = getc(fp); } p->SubmitTime[j] = ' '; fscanf(fp,"%d",&(p->WholeTime)); getc(fp); //除去“,” fscanf(fp,"%d",&(p->memory)); getc(fp); fscanf(fp,"%d",&(p->tapeDriverNum)); if(NULL == job) { job = p; } else { q = job; while(NULL != q->link) { q = q->link; } q->link = p; } fseek(fp,13L,1); } } showAllJob(job);}int main(){ importData();}