📄 parse.c
字号:
//default_tab();
tem.rownum=0;
tem.tabnum_f=0;
return tem;//无信息内容
}
ptr=strstr(ptr,str4);
ptr=ptr+4;
while((memcmp(ptr,strcpch1,6)!=0) && ((*ptr)!='\0' ))
{
ptr=loadchildtab(ptr,i_r,i_f,pchlist,(char *)&strid); //一行解析
if(ptr==NULL)
{
printf("parse_childtab ptr ==NULL\n");
tem.rownum=0;
tem.tabnum_f=0;
return tem;
break;
}
i_r++;
i_f++;
if(!memcmp(ptr,str4,4))//<tb>
ptr=ptr+4;
if(!memcmp(ptr,str9,8))//</tbody>
{
ptr=ptr+8;
continue;
}
if(!memcmp(ptr,strcpch1,6))// </pch>
{
break;
}
if(!memcmp(ptr,strctab1,9))// </tabpch>
{
break;
printf("end\n");
}
}
//if((*ptr)='\0')
if((*ptr)=='\0')
return tem;
if(!memcmp(ptr,strcpch1,6)) // </pch>
ptr=ptr+6;
}
else if(strstr(ptr,strcpch0)==NULL) //can't search '<pch'
{
tem.rownum=0;
tem.tabnum_f=0;
return tem;
break;
}
}
tem.rownum=i_r;
return tem;
}
void printf_childlist(int a,TASK_B * task_b)
{
TASK_B * tb=task_b;
int colum_num=0;
for(colum_num=0;colum_num<a;colum_num++)
{
printf("\n\n");
printf((tb+colum_num)->SHUNITS);printf("\n");
printf((tb+colum_num)->PUNITS);printf("\n");
printf("%c",(task_b+colum_num)->SFLAGE);printf("\n");
}
}
//---任务计划表与子表地址映射
PARSE_M parse_map(char *p,TASK_A *plist,TASK_B * pchlist)
{
PARSE_M p_map;
PARSE_T p_tab;
PARSE_C p_ctab;
int i_t;
int i_c;
int i_m;
//bzero((char *)&p_map,sizeof(PARSE_M));
i_t=0;
i_c=0;
i_m=0;
memset((char *)&p_map,0,sizeof(PARSE_M));
memset((char *)&p_tab,0,sizeof(PARSE_T));
memset((char *)&p_ctab,0,sizeof(PARSE_C));
p_tab=parse_tab(p,plist);
p_ctab=parse_childtab( p, pchlist);
p_map.tcolumnnum_f=p_tab.columnnum_f;
p_map.tcolumnnum_t=p_tab.columnnum_t;
p_map.trownum_f=p_tab.rownum_f;
p_map.trownum_t=p_tab.rownum_t;
p_map.cctabnum_f=p_ctab.tabnum_f;
p_map.ctabnum_t=p_ctab.tabnum_t;
p_map.crownum=p_ctab.rownum;
//异常处理
if(p_tab.rownum_f==0)//无计划表
return p_map;
if(p_tab.rownum_f!=p_tab.rownum_t)//理论值与实际解析值不同
{
;//
}
if(p_ctab.tabnum_t==0)//无子表
return p_map;
if(p_ctab.rownum==0)//子表数组为0
return p_map;
//地址映射
for(i_t=0;i_t<p_tab.rownum_f;i_t++)
{
for(i_c=0;i_c<p_ctab.rownum;i_c++)
{
if(((strcmp((plist+i_t)->UNITS,(pchlist+i_c)->PUNITS)>=0)&&(pchlist->SFLAGE=='1'))||((strcmp((pchlist+i_c)->PUNITS,(plist+i_t)->UNITS)>=0)&&(pchlist->SFLAGE=='1')))
{
(plist+i_t)->ptr=(pchlist+i_c);
i_m++;
break;
}
}
if(i_c>=p_ctab.rownum)
(plist+i_t)->ptr=NULL;
}
p_map.mapnum=i_m;
return p_map;
}
void printf_map(int a,PARSE_M c,TASK_A *task_a,TASK_B *task_b)
{
TASK_A *ta;
TASK_B *tb;
int i=0;
ta=task_a;
tb=task_b;
printf("parse_map tcolumnnum_t is %d\n",c.tcolumnnum_t);
printf("parse_map tcolumnnum_f is %d\n",c.tcolumnnum_f);
printf("parse_map trownum_t is %d\n",c.trownum_t);
printf("parse_map trownum_f is %d\n",c.trownum_f);
printf("parse_map ctabnum_t is %d\n",c.ctabnum_t);
printf("parse_map cctabnum_f is %d\n",c.cctabnum_f);
printf("parse_map crownum is %d\n",c.crownum);
printf("parse_map mapnum is %d\n",c.mapnum);
printf("parse_map :\n");
for(i=0;i<a;i++)
{
printf("map header member 's PUNITS is :");
printf((ta+i)->ptr->PUNITS);printf("\n");
printf("map header member 's SHUNITS is :");
printf((ta+i)->ptr->SHUNITS);printf("\n");
printf("map header member 's SFLAGE is %c\n",(ta+i)->ptr->SFLAGE);
}
}
//------------复检代码
char *load_fj(char *p,int row_num ,int colum_num,LIST_FJ *pplist)
{
int i=0;
char a;
if( (*p) == '<' )
{
p++;
while( ((*p) != '>') && ((*p) != '\0') )
{
a = *p;
switch(colum_num)
{
//显示项
case 0:
if(i<49)
(pplist+row_num)->fjnum[i] =a;
else
(pplist+row_num)->fjnum[49] ='\0';//防止数组边界溢出
break;
case 1:
if(i<49)
(pplist+row_num)->fjname[i] =a;
else
(pplist+row_num)->fjname[49] ='\0';//防止数组边界溢出
break;
default:
if(i<49)
(pplist+row_num)->fjnum[i]=a;//顺序号
else
(pplist+row_num)->fjnum[49]='\0';//防止数组边界溢出
break;
}
p++;
i++;
}
switch(colum_num)
{
//显示项
case 0:
if(i<49)
(pplist+row_num)->fjnum[i] ='\0';
else
(pplist+row_num)->fjnum[49] ='\0';//防止数组边界溢出
break;
case 1:
if(i<49)
(pplist+row_num)->fjname[i] ='\0';
else
(pplist+row_num)->fjname[49] ='\0';
default:
if(i<49)
(pplist+row_num)->fjnum[i]='\0';
else
(pplist+row_num)->fjnum[49]='\0';
break;
}
if( (*p) == '\0' )
return NULL;//错误信息
if( (*p) == '>' )
{
p++;
i++;
return p;
}
}
else
return NULL;
return p;
}
char *loadtabfj(char *p,int row,LIST_FJ *plistfj)
{
int i_c;
i_c=0;
while( (memcmp(p,str5,5)!=0) && ((*p)!='\0' ))//不是结束符</tb>
{
if(strstr(p,str6)==NULL)
p++;
else if(strstr(p,str6)!=NULL)
{
p = load_fj(p,row,i_c,plistfj);
if(p==NULL)
return NULL;
i_c++;
}
}
if(!(memcmp(p,str5,5)))//是结束符
{
p = p+5;
}
else
p = NULL;
return p;
}
//parse tabplan information function
PARSE_T parse_fj(char *p,LIST_FJ *plistfj)
{
PARSE_T temt;
int row_t,colum_t;
int i_r;
char *ptr;
ptr =p;
memset((char *)&temt,0,sizeof(PARSE_T));
i_r=0;
if(strstr(p,strfj0)==NULL)
{ printf("parse_fj no tab\n");
return temt;//无信息表
}
ptr=strstr(p,strfj0);
if(strstr(ptr,str0)!=NULL)
{
p_str=strstr(ptr,str0);
p_str=p_str+7;
colum_t=atoi(p_str);
temt.columnnum_t=colum_t;
printf("parse_fj columt=%d\n",colum_t);
}
if(strstr(p_str,str1)!=NULL)
{
p_str=strstr(p,str1);
p_str=p_str+4;
row_t=atoi(p_str);
temt.rownum_t=row_t;
printf("parse_fj rowt=%d\n",row_t);
}
if(strstr(ptr,str4)==NULL)//<tab>
{
//default_tab();
return temt;//无信息内容
}
ptr=strstr(ptr,str4);
ptr=ptr+4;
i_r=0;
while((memcmp(ptr,strfj1,8)!=0) && ((*ptr)!='\0' ))//<tabfj
{
ptr=loadtabfj(ptr,i_r,plistfj);
if(ptr==NULL)
{
printf("parse_fj ptr ==NULL\n");
return temt;
break;
}
i_r++;
if(!memcmp(ptr,str4,4))//<tab>
ptr=ptr+4;
if(!memcmp(ptr,str9,8))//</tbody>
{
ptr=ptr+8;
continue;
}
}
if((*ptr)=='\0')
return temt;
if(!memcmp(ptr,strfj1,8)) // </tabfj>
ptr=ptr+8;
temt.rownum_f=i_r;
temt.columnnum_f=0;
return temt;
}
void printf_list_fj(int a ,LIST_FJ *list_fj)
{
LIST_FJ *lf;
int colum_num;
colum_num=1;
lf=list_fj;
for(colum_num=1;colum_num<a+1;colum_num++)
{
printf("\n");
printf((lf+colum_num-1)->fjnum);
printf((lf+colum_num-1)->fjname);printf("\n");
strcat((lf+colum_num-1)->fjnum,(lf+colum_num-1)->fjname);
printf("parse_fj strcat output:");printf((lf+colum_num-1)->fjnum);printf("\n");
}
}
//------------缺陷代码
char *load_error(char *p,int row_num,int colum_num,LIST_ERROR *plisterr)
{
int i=0;
char a;
if( (*p) == '<' )
{
p++;
while( ((*p) != '>') && ((*p) != '\0') )
{
a = *p;
switch(colum_num)
{
//显示项
case 0:
if(i<49)
(plisterr+row_num)->errornum[i] =a;
else
(plisterr+row_num)->errornum[49] ='\0';//防止数组边界溢出
break;
case 1:
if(i<99)
(plisterr+row_num)->errorname[i] =a;
else
(plisterr+row_num)->errorname[99] ='\0';//防止数组边界溢出
break;
default:
if(i<49)
(plisterr+row_num)->errornum[i]=a;//顺序号
else
(plisterr+row_num)->errornum[49]='\0';//防止数组边界溢出
break;
}
p++;
i++;
}
switch(colum_num)
{
//显示项
case 0:
if(i<49)
(plisterr+row_num)->errornum[i] ='\0';
else
(plisterr+row_num)->errornum[49] ='\0';//防止数组边界溢出
break;
case 1:
if(i<99)
(plisterr+row_num)->errorname[i] ='\0';
else
(plisterr+row_num)->errorname[99] ='\0';
default:
if(i<49)
(plisterr+row_num)->errornum[i]='\0';
else
(plisterr+row_num)->errornum[49]='\0';
break;
}
if( (*p) == '\0' )
return NULL;//错误信息
else if( (*p) == '>' )
{
p++;
i++;
return p;
}
}
else
return NULL;
return p;
}
char *loadtaberr(char *p,int row,LIST_ERROR *plisterr)
{
int i_c;
i_c=0;
while((memcmp(p,str5,5)!=0) && ((*p)!='\0' ))//不是结束符</tb>
{
if(strstr(p,str6)==NULL)
p++;
else if(strstr(p,str6)!=NULL)
{
p = load_error(p,row,i_c,plisterr);
if(p==NULL)
return NULL;
i_c++;
}
}
if(!(memcmp(p,str5,5)))//是结束符
{
p = p+5;
}
else
p = NULL;
return p;
}
PARSE_T parse_err(char *p,LIST_ERROR *plisterr)
{
PARSE_T temt;
int row_t,colum_t;
int i_r;
char *ptr;
ptr =p;
memset((char *)&temt,0,sizeof(PARSE_T));
i_r=0;
if(strstr(p,strtaberr0)==NULL)
{ printf("parse_err no tab\n");
return temt;//无信息表
}
ptr=strstr(p,strtaberr0);
if(strstr(ptr,str0)!=NULL)
{
p_str=strstr(ptr,str0);
p_str=p_str+7;
colum_t=atoi(p_str);
temt.columnnum_t=colum_t;
printf("parse_err columt=%d\n",colum_t);
}
if(strstr(p_str,str1)!=NULL)
{
p_str=strstr(p,str1);
p_str=p_str+4;
row_t=atoi(p_str);
temt.rownum_t=row_t;
printf("parse_err rowt=%d\n",row_t);
}
if(strstr(ptr,str4)==NULL)//<tab>
{
//default_tab();
return temt;//无信息内容
}
ptr=strstr(ptr,str4);
ptr=ptr+4;
i_r=0;
while((memcmp(ptr,strtaberr1,11)!=0) && ((*ptr)!='\0' ))//<tabfj
{
ptr=loadtaberr(ptr,i_r,plisterr);
if(ptr==NULL)
{
printf("parse_err ptr ==NULL\n");
return temt;
break;
}
i_r++;
if(!memcmp(ptr,str4,4))//<tab>
ptr=ptr+4;
if(!memcmp(ptr,str9,8))//</tbody>
{
ptr=ptr+8;
continue;
}
}
if((*ptr)=='\0')
return temt;
if(!memcmp(ptr,strtaberr1,11)) // </taberror>
ptr=ptr+11;
temt.rownum_f=i_r;
temt.columnnum_f=0;
return temt;
}
void printf_list_error(int a,LIST_ERROR *list_error)
{
LIST_ERROR *le;
int colum_num;
le=list_error;
colum_num=1;
for(colum_num=1;colum_num<a+1;colum_num++)
{
printf("\n");
printf((le+colum_num-1)->errornum);
printf((le+colum_num-1)->errorname);printf("\n");
strcat((le+colum_num-1)->errornum,(le+colum_num-1)->errorname);
printf("printf_list_error strcat output:");printf((le+colum_num-1)->errornum);printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -