⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.c

📁 基于html文件解析、处理函数
💻 C
📖 第 1 页 / 共 2 页
字号:
				//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 + -