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

📄 editor2numric.cpp

📁 故障诊断工作涉及的领域相当广泛
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// editor2numric.cpp: implementation of the editor2numric class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "richtest.h"
#include "editor2numric.h"
#define MAXLINECNT 1024
#define BASELTH 4
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define NONE 0
	#define INFO 1
	#define TYPE 2
	#define COUNT 4
	#define DATA 8
    #define LINEXCOLUMN 16
	#define NAME 32
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
void editor2numric::bump(int line_num1,int line_num2,CRichEditCtrl* edit,char* sss,int n)
{
	char bag[5];
	CString info;
	info.Format(sss,n);
		int length=sprintf(bag,"%d",line_num1);
							for(int v=0;v<length;v++)
								info+=bag[v];
							 	info+="行——第";
							 length=sprintf(bag,"%d",line_num2);
								for(v=0;v<length;v++)
									info+=bag[v];
								 info+="行";
								AfxMessageBox(info);
								int line_index=edit->LineIndex(line_num1-1);
								edit->SetSel(line_index,line_index+6);
				
}
void editor2numric::error_input(int line_num,CRichEditCtrl* edit,char* sss,int n)
{char bag[5];
	CString info;
	info.Format(sss,n);
	int length=sprintf(bag,"%d",line_num);
	for(int v=0;v<length;v++)
	info+=bag[v];
	CString hang="行";
	 info+=hang;
	AfxMessageBox(info);
	int line_index=edit->LineIndex(line_num-1);
	edit->SetSel(line_index,line_index+6);
}
editor2numric::editor2numric(mydata *data,CRichEditView* in_editor)
{	pdata=data;
	reditor=in_editor;
	total_count=0;
};
editor2numric::editor2numric(mydata *data,CString* in_editor)
{	pdata=data;
	total_count=0;

};
void editor2numric::file2double(mydata *data,CArchive& ar)
{	int count=0,i=0;
	CFile* fp=ar.GetFile();
	int lth=fp->GetLength();
	char* bag0=new char[64];
	double* ibag=new double[lth/2];
	char* bag=bag0,c;
	do{
		count++;
		ar>>c;
	}while(c!='{'&&count<lth);
	do{	count++;		
		ar>>c;
		if(c>='0'&&c<='9')
		*(bag++)=c;
		else if((c==',')||c=='}')
		{
		*(ibag+i++)=atof(bag0);
		bag=bag0;
		if(c=='}')
			goto tail;
		}			
	}while(count<lth);
tail:	data->set_data(NULL,BASELTH,type_dou,i,ibag);
	delete []bag0;
	delete []ibag;
	
}
int editor2numric::InputData() 
{	BOOL matrix=0,mw_name=FALSE,bline=FALSE,bcolumn=FALSE,blc=FALSE,error=FALSE;
	int where=0,the_line=0,the_column=0,current_line=0;
	BOOL empty=TRUE;
	int line_flag=0;
	char *buffer0=new char[1000];
	char *buffer=buffer0;
	char *name[100];
	int name_length[100];
	memset(name_length,0,100*sizeof(int));
	for(int u=0;u<100;u++)
		name[u]=new char[128];
//	char *name=name0;
	int info_length=0;
	mytype the_type;
	int the_count=0,mwn=0;
	int matrix_line[100];
	int matrix_column[100];
	double hl[2];
	double *data0=new double[1000];
	double *data=data0;
	int type_line_num=0,count_line_num=0,last_data_line_num=0;
//	int type_line_len,count_line_len,last_data_line_len;
	// TODO: Add your command handler code here
		CRichEditCtrl& edit=reditor->GetRichEditCtrl();
	char* line=new char[1000];
	int line_count=edit.GetLineCount();;
	int i,line_flag_last=line_flag,j,real_count=0;
	int char_count;
	if(line_count)
		{
		//	transfer_line(line,line_flag,line_flag_last);
		for(i=0;i<line_count;i++)
		{
			char_count=edit.GetLine(i,line);
			if(this->is_from_file(line,char_count))
			{	static CString filename,line;
				filename.Empty();
				CFileDialog	dlg(TRUE);
				if(IDOK==dlg.DoModal())
				{filename=dlg.GetFileName();
				}
			if(!filename.IsEmpty())
			{static char* bag0,*bag;
				CFile* filebin=new CFile(filename,CFile::modeRead);
				if(filebin!=NULL)
				{   	
					CArchive ar(filebin,CArchive::load);
					file2double(pdata,ar);
				goto end;
				}
			}
			}


		}
		if(line_count<2)
			goto end;
			line_flag_last=line_flag;
			for(i=0;i<line_count;i++)
			{
				char_count=edit.GetLine(i,line);
				int m=0;
				for(m=0;m<4;m++)
				*(line+char_count++)=';';
				line_flag=analize_line(line,char_count,&where);
				if(line_flag&INFO)
					{	
					if(line_flag_last&DATA)
						{if(((real_count>0)&&(real_count==the_count))||(the_count==0))
							{info_length=buffer-buffer0;
								if(!matrix)
											pdata[total_count++].set_data(buffer0,info_length,the_type,real_count,data);
										else 
											if(current_line!=the_line)
											{error=TRUE;
												char sss[]="矩阵行冲突";
												bump(count_line_num,count_line_num,&edit,sss,sizeof(sss));
												goto end;
											
											}
											else pdata[total_count++].mset_data(buffer0,info_length,the_type,name,name_length,matrix_line,matrix_column,mwn,data);
							memset(name_length,0,mwn*sizeof(int));
								empty=TRUE;
								data=data0;
								buffer=buffer0;
								line_flag_last=NONE;
								the_count=0;
								real_count=0;
								matrix=FALSE;
								mwn=0;
								mw_name=FALSE;
								bline=FALSE;
								bcolumn=FALSE;
								current_line=0;
							}	
						else if(the_count!=0)
							{error=TRUE;
							char sss[]="数据数量不符:第";
									bump(count_line_num,last_data_line_num,&edit,sss,sizeof(sss));
								goto end;
							}
						}
						line_flag_last|=INFO;
						for(j=where+1;j<char_count-1;j++)
						*buffer++=*(line+j);
					}
				else if(line_flag&TYPE)
					{	if((line_flag_last&TYPE)&&real_count<.5)
							{error=TRUE;
							char sss[]="数据类型反复定义:第";
									bump(type_line_num,i+1,&edit,sss,sizeof(sss));
									goto end;
							}
						else {if(real_count>.5)
								{info_length=buffer-buffer0;
								if(!matrix)
											pdata[total_count++].set_data(buffer0,info_length,the_type,real_count,data);
										else if(current_line!=the_line)
											{error=TRUE;char sss[]="矩阵行冲突";
												bump(count_line_num,count_line_num,&edit,sss,sizeof(sss));
												goto end;
											
											}
											else pdata[total_count++].mset_data(buffer0,info_length,the_type,name,name_length,matrix_line,matrix_column,mwn,data);
								memset(name_length,0,mwn*sizeof(int));
								empty=TRUE;
								data=data0;
								buffer=buffer0;
								line_flag_last=NONE;
								the_count=0;
								real_count=0;
								matrix=FALSE;
								mwn=0;
								mw_name=FALSE;
								current_line=0;
								bline=FALSE;
								bcolumn=FALSE;
								}
								the_type=(mytype)line2type(line,char_count,where);
								type_line_num=i+1;
								line_flag_last|=TYPE|INFO;
								if(the_type==type_mw)
									matrix=TRUE;
							}
					}
				else if(line_flag&COUNT)
					{	 if(line_flag_last&COUNT)
							{error=TRUE;char sss[]="数据数量反复定义:第";
									bump(count_line_num,i+1,&edit,sss,sizeof(sss));
								 	goto end;
							}
						 else
							 {
								 the_count=line2count(line,char_count,where);
								 count_line_num=i+1;
								 if(the_count<0)
									 {error=TRUE;char sss[]="数据数量不能够是负数:第";
									error_input(i+1,&edit,sss,sizeof(sss));
										goto end;
									 }
								 	line_flag_last|=COUNT;
							}
					}
				else if(line_flag&DATA)
						{if(line_flag_last&TYPE)
							{ mw_name=FALSE;
								
						//		line_flag_last-=16;
								int count;
								line_flag_last|=DATA;
								count=line2double(line,char_count,data,where,real_count);
								if(the_type==type_mw)
								{blc=FALSE;
									if(!(line_flag_last&LINEXCOLUMN)&&bcolumn==FALSE)//美定义行列,第一行为准  
										{	
										matrix_column[mwn]=count-real_count;
										the_column=matrix_column[mwn];
										bcolumn=TRUE;
										};
									mwn++;
									if(count!=real_count)
									current_line++;
									if(current_line>the_line&&bline)
									{error=TRUE;char sss[]="矩阵行冲突";
									bump(i-the_line,i,&edit,sss,sizeof(sss));
									goto end;
									}
								}
						
							if(bcolumn)
								if(count-real_count!=the_column)
									{error=TRUE;char sss[]="矩阵列冲突";
									bump(i,i+1,&edit,sss,sizeof(sss));
										goto end;
										}
								if(count>real_count)
									last_data_line_num=i+1;
								real_count=count;
								if(i==line_count-1)
											{info_length=buffer-buffer0;
											if(!matrix)
											pdata[total_count++].set_data(buffer0,info_length,the_type,real_count,data);
										else if(current_line!=the_line)
											{error=TRUE;char sss[]="矩阵行冲突";
												bump(count_line_num,count_line_num,&edit,sss,sizeof(sss));
												goto end;
											
											}
											else pdata[total_count++].mset_data(buffer0,info_length,the_type,name,name_length,matrix_line,matrix_column,mwn,data);
											}
								if(real_count)
									empty=FALSE;
									
							}
					     else
							{error=TRUE;char sss[]="数据类型未定义";
									error_input(i+1,&edit,sss,sizeof(sss));
								goto end;
							}

						}
				else if(line_flag==LINEXCOLUMN)
							{if(line_flag_last&LINEXCOLUMN&&blc==TRUE)
								{error=TRUE;char sss[]="矩阵维数反复定义:第";
									bump(i,i+1,&edit,sss,sizeof(sss));
								 	goto end;
								}
							 else 
								{
								 int ccc=line2double(line,char_count,hl,where,0);
								 if(ccc==2)
									 {	matrix_line[mwn]=hl[0];
										matrix_column[mwn]=hl[1];
										the_line=hl[0];
										the_column=hl[1];
										blc=TRUE;
										
									//	if(mw_name)
									//		mwn++;
									 }

								 count_line_num=i+1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -