x86 该用户已被删除
|
一个简单的定义数据格式,采集数据,读取数据的程序
[这个贴子最后由x86在 2005/06/21 11:08pm 第 1 次编辑]
1、在服务端定义需采集的数据格式,保存在一个文件中。
2、客户端根据服务端定义的格式文件生成数据采集界面,采集数据,将数据存储在文件中。
3、在服务端识别客户端采集的数据文件。
1.整个程序分成server.exe和client.exe两部分。其中server部分主要用来定义数据格式,并保存在一个文件中。然后client部分来对数据格式的文件进行识别,并根据该文件进行数据的采集。并把采集的数据保存到一个文件中去。然后server部分再根据相关的数据格式文件来识别已经采集并保存的数据文件。
//---------------------------server.cpp------------------------------
//--------------定义数据格式,并根据已知格式读取数据------------------
#include
#include
struct format
{char name[100];
int type;
int start;
int end;
format* next;
};
void main()
{
int num,i,temp1;
char filename[20];
char dataname[20];
char rulename[20];
char flag=';\0';;
char flag2=';\0';;
FILE* fp1;
FILE* fp2;
FILE* fp3;
int j;
char* name;
format* temp;
format* pt=NULL;
format one[100];
printf("1:写入数据格式文件\n");
printf("2:根据已存在格式文件读出数据文件\n");
scanf("%c",&flag);
if(flag==';1';)
goto chuangjian;
else
goto shuchu;
chuangjian:printf("请输入要创建规则文件的名字:");
scanf("%s",filename);
if((fp1=fopen(filename,"wb"))==NULL)
{printf("file open filed!\n");
exit(0);
}
printf("请输入项目数:");
scanf("%d",&num);
pt=(format *)malloc((num*sizeof(struct format)));
memset(pt,0,(num*sizeof(struct format)));
temp=pt;
for(i=0;iname),&(pt->type),&(pt->start),&(pt->end));
if(num-i==1)
pt->next=NULL;
else
{pt->next=pt+1;
pt++;
}
}
if((fwrite(temp,(num*sizeof(struct format)),1,fp1))!=1)
printf("write error!\n");
free(temp);
fclose(fp1);
printf("规则写入成功!\n");
exit(0);
shuchu:printf("输入规则文件名:\n");
scanf("%s",rulename);
if((fp3=fopen(rulename,"rb"))==NULL)
{printf("rule文件打开失败!\n");
exit(0);
}
printf("输入要打开的文件名\n");
scanf("%s",dataname);
if((fp2=fopen(dataname,"rb"))==NULL)
{printf("data文件打开失败!\n");
exit(0);
}
for(i=0;i<100;i++)
{fread(&one,sizeof(struct format),1,fp3);
if(one.next==NULL)
break;
}
fclose(fp3);
temp1=i+1;
for(i=0;i.name);
printf("\n");
while(!feof(fp2))
{
for(i=0;i.type==0)
{fread(&j,sizeof(int),1,fp2);
printf("%d\t",j);
}
if(one.type==1)
{name=(char*)malloc(one.end);
fread(name,one.end,1,fp2);
printf("%s\t",name);
}
if(i==temp1-1)
printf("\n");
}
}
fclose(fp2);
}
//----------------------client.cpp-------------------------
//-----------------------根据已知数据格式采集数据并保存-------------
#include
#include
void main()
{int i,j,temp;
int num;
int length;
unsigned char* str=NULL;
FILE* fp1;
FILE* fp2;
int k;
char*str2=NULL;
struct format
{char name[100];
int type;
int start;
int end;
format* next;
};
struct format one[100];
memset(&one,0,sizeof(format));
char filename[20];
char dataname[20];
printf("请输入要解析的规则文件名:");
scanf("%s",filename);
if((fp1=fopen(filename,"rb"))==NULL)
{printf("file open filed!\n");
exit(0);
}
printf("名字\t类型\t下限\t上限\n");
for(i=0;i<100;i++)
{fread(&one,sizeof(struct format),1,fp1);
printf("%d:%s\t%d\t%d\t%d\n",i+1,&one.name,one.type,one.start,one.end);
if(one.next==NULL)
break;
}
fclose(fp1);
temp=i+1;
printf("一共有%d个属性\n",temp);
printf("输入保存数据的文件名:\n");
scanf("%s",dataname);
if((fp2=fopen(dataname,"ab"))==NULL)
{printf("fp2 open failed\n");
exit(0);
}
printf("请输入要输入的数据的数目:\n");
scanf("%d",&num);
for(i=0;ione[j].end)||(k (one[j].end))
{printf("输入错误,请重新输入!\n");
goto loop2;
}
fwrite(str2,one[j].end,1,fp2);
free(str2);
}
}
}
fclose(fp2);
}
|
|