亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dlgcreate.cpp

?? 一個數據庫建立與讀取的源代碼,帶有注釋,適合初學者使用很不錯
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
	while (*p && !(isascii(*p) && isalpha(*p)))
	{
		if (!isascii(*p))
			p++;
		p++;
	}
	if (*p=='\0')
		return -1;
	else
		return (p-str)/3;
}


////////////////////////////////////////////////////////////////
//判定字符串中位置i處的英文字符之后緊接著的非英文字符是不是等號
////////////////////////////////////////////////////////////////
int CDlgCreate::eq_after_it(CString str,int i)
{
	int k=i;
	int len=str.GetLength();

	if (k>=len)
		return 0;
	while(k<len && isascii(str.GetAt(k)) && isalpha(str.GetAt(k)))
		k++;
	if (k>=len)
		return 0;
	else if (str.GetAt(k)!='=')
		return 0;
	return 1;
}


////////////////////////////////////////////////
// 根據數組建立《知網》數據庫的表entity的結構
// 結構體struct fieleds_len entity_fields_len的各個元素
// 的值對應表entity各個字段的長度
////////////////////////////////////////////////
void CDlgCreate::build_hownet_entitystru(CString filename_to_build,struct fieleds_len entity_fields_len)
{
	
	CDaoDatabase myDatabase;
	myDatabase.Open(filename_to_build);

	// 建立表entity,存放的內容是《知網》詞典
	CDaoTableDef *pTable;
	pTable=new CDaoTableDef(&myDatabase);
	pTable->Create("entity");


	pTable->CreateField("序號",dbLong,entity_fields_len.len_order);
	pTable->CreateField("名稱",dbText,entity_fields_len.len_name+5);
	pTable->CreateField("屬性",dbText,entity_fields_len.len_attr+5);
	pTable->CreateField("層次",dbLong,entity_fields_len.len_layer);
	pTable->CreateField("父親",dbLong,entity_fields_len.len_parent);
	pTable->CreateField("兒子",dbLong,entity_fields_len.len_son);
	pTable->CreateField("兄弟",dbLong,entity_fields_len.len_brother);
	

	pTable->Append();	// 將表dict結構存入詞庫

	pTable->Close();	
	delete pTable;

	myDatabase.Close();
}


//////////////////////////////////////////////////////
// 建立表event,存放《知網》的event層次體系
//////////////////////////////////////////////////////
int CDlgCreate::build_event(CString event_txt_file, CString hownet_database_file, int &i_max_event_name_len)
{

	int i_read_pointer;
	struct fieleds_len event_fields_len;

	//	建立動詞event層次樹
	i_read_pointer=-1;
	i_read_pointer=build_layer_tree(event_txt_file,NODE,MAX_EVENT_NUMBER,event_fields_len);
	if (i_read_pointer==-1)
		return -1;

	//輸出建立的動詞event層次樹到數據庫中
	int i_to_database=put_layer_tree_to_database(hownet_database_file,NODE,i_read_pointer,event_fields_len);
	if (i_read_pointer==-1)
		return -1;

	i_max_event_name_len=event_fields_len.len_name;

	return 0;
}


////////////////////////////////////////////////
//
//	建立event義原層次結構樹
//
////////////////////////////////////////////////
int CDlgCreate::build_layer_tree(CString FileName,event_tree *NODE,int max_read_number,struct fieleds_len &event_fields_len)
{	
	//定義后進先出棧
	int STACK[MAX_ENTITY_LAYER];	//里面存放的是節點在NODE[]中的位置
	//定義節點的指針(只是一些數,指示節點的位置)
	int i_read_pointer;
	//定義棧的指針
	int i_stack_pointer;


	// 初始化event_fields_len
	event_fields_len.len_name=0;
	event_fields_len.len_attr=0;
	event_fields_len.len_order=4;
	event_fields_len.len_layer=4;
	event_fields_len.len_parent=4;
	event_fields_len.len_son=4;
	event_fields_len.len_brother=4;

	//打開選定的文件
	CStdioFile inFile;
	if (!inFile.Open(FileName,CFile::modeRead))
	{
		CString TempStr;
		TempStr.Format("%s%s","無法讀取文件:",FileName);
		AfxMessageBox(TempStr);
		return -1;
	}

	//一行行地讀取文件直到文件結束
	i_read_pointer=0;
	i_stack_pointer=-1;

	char s[MAX_LINE_LEN];	//定義s存放讀入的字符串,這里MAX_LINE_LEN是一個預先定
							//義的常量,一行的最大允許字符的個數
	while(inFile.ReadString(s,MAX_LINE_LEN))
	{
			if (strlen(s)==0)
				continue;

			//節點賦初值
			CString event_name="",event_role="";
			get_name_role(s,event_name,event_role);

			del_englidh_info(event_name);
			if (event_name.GetLength()>event_fields_len.len_name)
				event_fields_len.len_name=event_name.GetLength();
			if (event_role.GetLength()>event_fields_len.len_attr)
				event_fields_len.len_attr=event_role.GetLength();

			NODE[i_read_pointer].event_name=event_name;
			NODE[i_read_pointer].event_role=event_role;
			if (NODE[i_read_pointer].event_name=="")
				NODE[i_read_pointer].event_name="*";
			if (NODE[i_read_pointer].event_role=="")
				NODE[i_read_pointer].event_role="*";
			NODE[i_read_pointer].order=i_read_pointer;
			NODE[i_read_pointer].son=-1;
			NODE[i_read_pointer].brother=-1;
			NODE[i_read_pointer].parent=-1;
			//確定節點的層次
			NODE[i_read_pointer].layer=get_layer(s);
			if (NODE[i_read_pointer].layer<0)
			{
				CString msg;
				msg.Format("建立層次樹的時候出了問題,請檢查源文件\n%s 第 %d 行",FileName,i_read_pointer+1);
				MessageBox(msg);
				return -1;
			}

			//建立動詞義原層次樹
			if (i_stack_pointer==-1)	//如果棧為空,剛讀到的節點是根節點
			{
				NODE[i_read_pointer].layer=0;
				i_stack_pointer=0;
				STACK[i_stack_pointer]=NODE[i_read_pointer].order;
			}
			else	//剛讀到的節點不是根節點,要入棧
			{
				//如果是棧頂節點的層次大于當前節點的層次
				//那么應該退棧,直到前者小與或者等于后者
				while (NODE[STACK[i_stack_pointer]].layer>NODE[i_read_pointer].layer)
				{
					i_stack_pointer--;
					if (i_stack_pointer<0)
					{
						CString msg;
						msg.Format("建立層次樹的時候出了問題,請檢查源文件\n%s 第 %d 行",FileName,i_read_pointer+1);
						MessageBox(msg);
						return -1;
					}
				}
				
				
				if (NODE[STACK[i_stack_pointer]].layer==NODE[i_read_pointer].layer)	
					//棧頂節點與當前節點是兄弟關系
				{

					NODE[STACK[i_stack_pointer]].brother=NODE[i_read_pointer].order;
					NODE[i_read_pointer].parent=NODE[STACK[i_stack_pointer]].parent;
					STACK[i_stack_pointer]=NODE[i_read_pointer].order;
				}
				else if (NODE[STACK[i_stack_pointer]].layer==NODE[i_read_pointer].layer-1)
					//棧頂節點與當前節點是父子關系
				{
					NODE[i_read_pointer].parent=STACK[i_stack_pointer];
					NODE[STACK[i_stack_pointer]].son=NODE[i_read_pointer].order;

					i_stack_pointer++;
					STACK[i_stack_pointer]=NODE[i_read_pointer].order;
				}
				else
				{
					CString msg;
					msg.Format("建立層次樹的時候出了問題,請檢查源文件\n%s 第 %d 行",FileName,i_read_pointer+1);
					MessageBox(msg);
					return -1;
				}
			}
	

			i_read_pointer++;
			if (i_read_pointer>=max_read_number)
			{
					CString msg;
					msg.Format("建立層次樹的時候出了問題,源文件\n%s 行數太多,預留數組空間不足",FileName);
					MessageBox(msg);
					return -1;
			}
	}
	inFile.Close();
	return i_read_pointer;
}


////////////////////////////////////////////
//
//	 獲得event義原的名字和角色
//
////////////////////////////////////////////
void CDlgCreate::get_name_role(char *str,CString &event_name,CString &event_role)
{

	event_name=event_role="";
	
	char *p,*q;
	char fetch_str[MAX_LINE_LEN];

	p=str;
	
	//定位到第一個英文字母
	while (*p && !(isascii(*p) && isalpha(*p)))
	{
		if (!isascii(*p))
			p++;
		p++;
	}
	if (*p=='\0')
		return;

	//開始拷貝動詞義原的名字
	q=fetch_str;
	while (*p && !(isascii(*p) &&  (isspace(*p) || *p=='{')))
	{
		if (!isascii(*p))
			*q++=*p++;
		*q++=*p++;
	}
	*q='\0';
	event_name=fetch_str;

	//定位到第一個"{"
	while (*p && *p!='{')
	{
		if (!isascii(*p))
			p++;
		p++;
	}

	if (*p=='\0')
		return;
	p++;

	//開始拷貝動詞角色的名字
	q=fetch_str;
	while (*p && *p!='}')
	{
		if (!isascii(*p))
			*q++=*p++;
		*q++=*p++;
	}
	*q='\0';
	event_role=fetch_str;
}


///////////////////////////////////////////////
//
//	把event事件層次樹填入數據庫的event表
//
///////////////////////////////////////////////
int CDlgCreate::put_layer_tree_to_database(CString FileName_out, struct event_tree *NODE,int i_write_pointer,struct fieleds_len event_fields_len)
{
	// 建立表event
	build_hownet_eventstru(FileName_out,event_fields_len);

	// 打開數據庫FileName_out
	CDaoDatabase myDatabase;
	myDatabase.Open(FileName_out);

	// 打開存放event層次關系的表event
	CDaoTableDef *pTable;
	pTable=new CDaoTableDef(&myDatabase);
	pTable->Open("event");

	// 對應表dict打開記錄集
	CDaoRecordset *pRec;
	pRec=new CDaoRecordset(&myDatabase);
	pRec->Open(pTable);

	//輸出建立的event層次樹導數據庫的表event
	struct record
	{
		CString COrder;
		CString CName;
		CString CAttr;
		CString CLayer;
		CString CParent;
		CString CSon;
		CString CBrother;
	}REC;

	COleVariant cole_order;
	COleVariant cole_name(REC.CName,VT_BSTRT);
	COleVariant cole_attr(REC.CAttr,VT_BSTRT);
	COleVariant cole_layer;
	COleVariant cole_parent;
	COleVariant cole_son;
	COleVariant cole_brother;


	for (int i=0;i<i_write_pointer;i++)
	{
		pRec->AddNew();

		cole_order=(long)NODE[i].order;
		pRec->SetFieldValue("序號",cole_order);

		REC.CName.Format("%s",NODE[i].event_name);
		cole_name.SetString(REC.CName,VT_BSTRT);
		pRec->SetFieldValue("名稱",cole_name);

		REC.CAttr.Format("%s",NODE[i].event_role);
		cole_attr.SetString(REC.CAttr,VT_BSTRT);
		pRec->SetFieldValue("屬性",cole_attr);

		cole_layer=(long)NODE[i].layer;
		pRec->SetFieldValue("層次",cole_layer);

		cole_parent=(long)NODE[i].parent;
		pRec->SetFieldValue("父親",cole_parent);

		cole_son=(long)NODE[i].son;
		pRec->SetFieldValue("兒子",cole_son);

		
		cole_brother=(long)NODE[i].brother;
		pRec->SetFieldValue("兄弟",cole_brother);

		pRec->Update();

	}
	pRec->Close();
	delete pRec;
	pTable->Close();	
	delete pTable;
	myDatabase.Close();


/*
	//輸出建立的層次樹之二-----調試程序
	CString FileName_out2=FileName_out+".txt";
	CStdioFile outFile;
	if (!outFile.Open(FileName_out2,CFile::modeCreate|CFile::modeWrite))
	{
		CString TempStr;
		TempStr.Format("%s%s","無法創建文件:",FileName_out2);
		AfxMessageBox(TempStr);
		return -1;
	}
	for (int k=0;k<i_write_pointer;k++)
	{
			CString s_wr="";
			for(int j=0;j<NODE[k].layer*3+2;j++)
				s_wr+=" ";
			s_wr+=NODE[k].entity_name;
			s_wr+="    ";
			s_wr+=NODE[k].entity_attr;
			s_wr+="\n";
			outFile.WriteString(s_wr);
	}
	outFile.Close();
*/
	return 0;
}


////////////////////////////////////////////////
// 根據數組建立《知網》數據庫的表event的結構
// 結構體struct fieleds_len event_fields_len的各個元素
// 的值對應表event各個字段的長度
////////////////////////////////////////////////
void CDlgCreate::build_hownet_eventstru(CString filename_to_build,struct fieleds_len event_fields_len)
{
	
	CDaoDatabase myDatabase;
	myDatabase.Open(filename_to_build);

	// 建立表entity,存放的內容是《知網》詞典
	CDaoTableDef *pTable;
	pTable=new CDaoTableDef(&myDatabase);
	pTable->Create("event");

	pTable->CreateField("序號",dbLong,event_fields_len.len_order);
	pTable->CreateField("名稱",dbText,event_fields_len.len_name+5);
	pTable->CreateField("屬性",dbText,event_fields_len.len_attr+5);
	pTable->CreateField("層次",dbLong,event_fields_len.len_layer);
	pTable->CreateField("父親",dbLong,event_fields_len.len_parent);
	pTable->CreateField("兒子",dbLong,event_fields_len.len_son);
	pTable->CreateField("兄弟",dbLong,event_fields_len.len_brother);
	
	pTable->Append();	// 將表dict結構存入詞庫

	pTable->Close();	
	delete pTable;

	myDatabase.Close();
}


////////////////////////////////////////////////
// 字符指針p指向某個詞的DEF
// 現在求其第一義原
// 一般來說,第一義原就是其第一個逗號之前的部分
// 如果該部分是“屬性”、“屬性值”或者“部件”
// 那么,第一義原取第一個逗號之后第二個逗號之前的部分
// 本函數調用求第一義原的函數
////////////////////////////////////////////////
CString CDlgCreate::get_first_sem(char *p)
{
	CString str;
	CString first;
	str=p;
	del_englidh_info(str);

	// 尋找第一個逗號之前的部分,存入變量first
	int k;
	for (k=0;k<str.GetLength();k++)
	{
		if (str.GetAt(k)==',')
			break;
		if (!isascii(str.GetAt(k)))
			k++;
	}
	first=str.Left(k);
	
	if (first=="屬性" || first=="屬性值" || first=="部件")
	{	// first=上述三者之一,需要再找第二部分
		if (k>=str.GetLength())	// 沒有第二部分,返回空字符串
			first="";
		else
		{
			// 下面把找到第二部分起點
			str=str.Right(str.GetLength()-k);
			for(k=0;k<str.GetLength();k++)
			{
				if (!isascii(str.GetAt(k)))
					break;
			}
			str=str.Right(str.GetLength()-k);
		
			if (str.GetLength()==0)
				first="";
			else
			{
				// 下面開始找第一義原
				for (k=0;k<str.GetLength();k++)
				{
					if (str.GetAt(k)==',')
						break;
					if (!isascii(str.GetAt(k)))
						k++;
				}
				first=str.Left(k);
			}
		}
	}
	return first;
}



////////////////////////////////////////////////
// 建立《知網》數據庫的臨時表temp的結構
// 參數i_name_len對應臨時表當中的“名稱”字段的長度
////////////////////////////////////////////////
int CDlgCreate::build_temp(int i_name_len, CString filename_to_build)
{
	
	CDaoDatabase myDatabase;
	myDatabase.Open(filename_to_build);

	// 建立表temp,以便存放表entity或者表event的序號和名稱
	CDaoTableDef *pTable;
	pTable=new CDaoTableDef(&myDatabase);
	pTable->Create("temp");

	pTable->CreateField("序號",dbLong,4);
	pTable->CreateField("名稱",dbText,i_name_len+5);
	
	pTable->Append();	// 將表dict結構存入詞庫

	pTable->Close();	
	delete pTable;

	myDatabase.Close();

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线亚洲欧美专区二区| 精品一区二区三区免费播放 | 制服.丝袜.亚洲.另类.中文 | 精品视频全国免费看| 久久久青草青青国产亚洲免观| 亚洲激情图片qvod| 国产精品亚洲午夜一区二区三区 | 日本韩国欧美在线| 久久久久久久久蜜桃| 日本va欧美va瓶| 在线观看91视频| 亚洲欧美中日韩| 国产美女主播视频一区| 欧美一区二区免费视频| 亚洲图片欧美综合| 色天使色偷偷av一区二区| 欧美激情资源网| 国产原创一区二区| 欧美一区二区免费视频| 性久久久久久久| 欧美在线观看一区| 一个色综合av| 日本韩国欧美一区二区三区| 国产精品女主播av| 国产一区二区福利| 2021久久国产精品不只是精品| 日韩精品一区第一页| 欧美疯狂性受xxxxx喷水图片| 亚洲午夜国产一区99re久久| 色婷婷综合久久久久中文| 国产精品国产三级国产| 成人福利视频在线看| 中文字幕av一区二区三区免费看| 国产不卡视频在线播放| 国产日韩综合av| 国产成人免费在线视频| 久久久国产精品麻豆| 国产成人亚洲综合a∨婷婷图片| 337p日本欧洲亚洲大胆精品| 久久99久久99| 久久综合久久综合亚洲| 国产一区二区日韩精品| 国产区在线观看成人精品| 成人蜜臀av电影| 日韩一区中文字幕| 一本久久综合亚洲鲁鲁五月天| 亚洲美女偷拍久久| 欧美三区在线观看| 日本不卡一二三区黄网| 欧美大黄免费观看| 国产精品影视网| 国产精品传媒入口麻豆| 色婷婷精品久久二区二区蜜臂av| 亚洲男同性恋视频| 欧美日韩免费视频| 美女尤物国产一区| 精品av久久707| 国产大片一区二区| 亚洲欧洲成人精品av97| 91国产精品成人| 亚洲午夜私人影院| 日韩欧美卡一卡二| 国产露脸91国语对白| 国产精品久久久久久久久果冻传媒 | 国产真实乱偷精品视频免| 国产亚洲精品7777| 91视频在线观看| 日韩中文字幕一区二区三区| 欧美精品一区二区精品网| 不卡一区二区在线| 午夜精品视频在线观看| 精品国产乱码久久久久久久久| 成人av网站在线| 亚洲国产人成综合网站| 精品国产伦一区二区三区观看方式 | 亚洲成人你懂的| 日韩欧美卡一卡二| 99久久伊人精品| 亚洲va天堂va国产va久| 亚洲精品在线网站| 91一区二区三区在线播放| 性欧美疯狂xxxxbbbb| 国产亚洲一本大道中文在线| 色综合久久中文字幕综合网| 青青国产91久久久久久| 国产精品区一区二区三| 欧美精品一级二级三级| 国产成人综合自拍| 亚洲二区在线视频| 久久精品一区二区三区不卡牛牛 | 国产一区二区三区四区五区美女| 国产精品成人一区二区艾草| 91精品国产综合久久精品app| 国产又黄又大久久| 亚洲电影你懂得| 久久久久久久久久看片| 欧美三级日韩三级| 国内成+人亚洲+欧美+综合在线 | 久久午夜免费电影| 91蜜桃免费观看视频| 久久电影网电视剧免费观看| 亚洲男人的天堂在线aⅴ视频| 日韩一级免费观看| 91在线国内视频| 麻豆成人久久精品二区三区小说| 亚洲欧美综合色| 久久久噜噜噜久久人人看 | 激情五月婷婷综合网| 老司机精品视频一区二区三区| 最新中文字幕一区二区三区 | 色综合久久综合网97色综合| 黄色成人免费在线| 香蕉久久夜色精品国产使用方法| 亚洲国产精品成人综合| 777久久久精品| 色欧美日韩亚洲| 成人综合婷婷国产精品久久蜜臀| 青青草国产精品97视觉盛宴| 亚洲一区二区成人在线观看| 国产精品欧美经典| 久久久久免费观看| 日韩一级成人av| 欧美性生活影院| 93久久精品日日躁夜夜躁欧美| 国产在线精品视频| 免费不卡在线观看| 一区二区三区精品| 国产精品久久久一区麻豆最新章节| 精品国产一区二区三区不卡 | 91激情五月电影| 99久精品国产| 国产成人一级电影| 国产一区日韩二区欧美三区| 日本伊人午夜精品| 图片区小说区国产精品视频| 亚洲综合丝袜美腿| 亚洲天堂久久久久久久| 国产精品青草久久| 国产精品免费视频网站| 久久精品亚洲精品国产欧美| 26uuu精品一区二区| 精品精品国产高清a毛片牛牛| 欧美一级高清大全免费观看| 欧美精品丝袜中出| 欧美日韩一区二区在线视频| 91激情五月电影| 在线观看日韩电影| 欧美午夜精品免费| 欧美性色黄大片| 欧美日韩激情在线| 欧美三级三级三级爽爽爽| 欧美色图激情小说| 精品视频1区2区| 7777精品伊人久久久大香线蕉的 | 亚洲国产精品自拍| 午夜天堂影视香蕉久久| 午夜视频一区二区| 午夜视频在线观看一区二区三区| 午夜在线电影亚洲一区| 日韩av电影天堂| 久久91精品国产91久久小草| 久久er精品视频| 韩国成人精品a∨在线观看| 国产乱人伦偷精品视频不卡| 国产一区二区三区黄视频| 国产精品夜夜嗨| av在线这里只有精品| 99久久精品国产观看| 91精品办公室少妇高潮对白| 欧美视频在线播放| 91麻豆精品国产自产在线| 日韩精品一区二区在线| 精品999在线播放| 中文一区一区三区高中清不卡| 国产精品传媒入口麻豆| 艳妇臀荡乳欲伦亚洲一区| 天堂va蜜桃一区二区三区| 久久99精品久久久久久国产越南| 国精品**一区二区三区在线蜜桃| 国产精品性做久久久久久| av资源网一区| 欧美日韩国产成人在线免费| 日韩一区二区精品| 国产欧美日韩精品在线| 亚洲男帅同性gay1069| 天天综合网 天天综合色| 久久精品国产亚洲一区二区三区| 国产精品一区一区| 色综合夜色一区| 7777精品伊人久久久大香线蕉的 | 亚洲va国产天堂va久久en| 看电视剧不卡顿的网站| 国产99精品视频| 在线免费观看日韩欧美| 日韩久久久精品| 中文字幕欧美一| 日韩制服丝袜av| 成人av在线一区二区三区| 精品视频在线看| 国产片一区二区|