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,2
JOB2,10:20,30,60,1
JOB3,10:30,10,50,3
JOB4,10:35,20,10,2
JOB5,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%d\n",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] ='\0';
//获取到达时间
t= getc(fp);
j = 0;
while(',' != t)
{
p->SubmitTime[j++] = t;
t = getc(fp);
}
p->SubmitTime[j] = '\0';
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();
}