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

📄 strobj.c

📁 eXtremeDB数据库在Linux平台下的使用源码。内含多个示例程序
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "simple.h"#ifdef _STR_OBJECT_TEST_void prnObject(AreaCode * areaCode){	MCO_RET                 rc = 0;	char					pstr[10];	char					val[20];	uint2 sz;	memset(val,0,20);	rc = AreaCode_areaCode_get(areaCode,val,20,&sz);	if ( rc != MCO_S_OK ) {		printf( "\n\terror:%d", rc );	}	rc = AreaCode_strAreaCode_get(areaCode,pstr,10);	if ( rc != MCO_S_OK ) {		printf( "\n\terror:%d", rc );	}		printf("<%s,%s>\n",val,pstr);}void doListing( mco_db_h db ) {	MCO_RET                 rc = 0;	mco_cursor_t            csr;	mco_trans_h             trn;	AreaCode            areaCode;		printf("\nData listing:\n\n" );		mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &trn );		/* initialize cursor */	rc = AreaCode_IareaCode_index_cursor( trn, &csr );		for	(		rc = mco_cursor_first(trn, &csr);	rc == MCO_S_OK;	rc = mco_cursor_next(trn, &csr)		)	{		rc = AreaCode_from_cursor( trn, &csr, &areaCode );		if ( rc != MCO_S_OK ) {			printf( "\n\terror:%d", rc );			break;		}		prnObject(&areaCode);	}		mco_trans_commit( trn );		return;}int AddRecord(mco_trans_h t,const char* val, const char* pstr){	MCO_RET rc;	AreaCode areaCode;		rc = AreaCode_new(t, &areaCode);	if ( rc != MCO_S_OK ) return rc;	rc = AreaCode_strAreaCode_put(&areaCode, pstr, (uint2)(strlen(pstr)+1));	if ( rc != MCO_S_OK ) return rc;	rc = AreaCode_areaCode_put(&areaCode,val,(uint2)(strlen(val)));	if ( rc != MCO_S_OK ) return rc;		return MCO_S_OK;}int createDatabase(mco_db_h db){	MCO_RET                 rc = 0;	mco_trans_h             t;			mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );	AddRecord(t,"01","ATT");	AddRecord(t,"020","BCC");	AddRecord(t,"025","TNT");	AddRecord(t,"03","ANC");	AddRecord(t,"0355","NCC");	AddRecord(t,"0355","UDC");	AddRecord(t,"045","WTC");	AddRecord(t,"0454","FCC");	AddRecord(t,"05","ABB");	AddRecord(t,"051","DDA");	AddRecord(t,"051","FIY");	AddRecord(t,"0513","ASD");	AddRecord(t,"0515","ASH");	AddRecord(t,"05183","ASW");	AddRecord(t,"0525","ASP");	AddRecord(t,"06","YUI");	AddRecord(t,"064","KEW");	AddRecord(t,"066","WER");	AddRecord(t,"0668","VBR");	AddRecord(t,"0668","MPP");	AddRecord(t,"0668","FCA");	AddRecord(t,"06689","FCU");	AddRecord(t,"0699","FCH");	AddRecord(t,"06683","FCL");	AddRecord(t,"06685","FCD");	AddRecord(t,"06687","FCA");	AddRecord(t,"07","MNM");	AddRecord(t,"07","MGM");	AddRecord(t,"079","MSM");	AddRecord(t,"0795","EAE");	AddRecord(t,"081","YUI");	AddRecord(t,"084","WWW");	AddRecord(t,"0849","OLA");	AddRecord(t,"09","GEA");	AddRecord(t,"099","YTR");	AddRecord(t,"099","IUI");	AddRecord(t,"0988","JHJ");	AddRecord(t,"0988","DFD");		rc = mco_trans_commit( t );	if ( rc != MCO_S_OK )		printf("Commit error %d !\n",rc);	return rc;}void searchExact( mco_db_h db, const char * strAreaCode ){	MCO_RET                 rc = 0;	mco_trans_h             trn;	AreaCode            areaCode;	mco_cursor_t            csr;	mco_trans_start( db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &trn );		rc = AreaCode_IareaCode_index_cursor( trn, &csr );	rc = AreaCode_IareaCode_exact_match(trn, &csr, strAreaCode, (uint2)(strlen(strAreaCode)));	if ( rc == MCO_S_OK )	{		printf("Found ExactMatch for key %s:\n",strAreaCode);		while (rc == MCO_S_OK)		{			rc = AreaCode_from_cursor( trn, &csr, &areaCode );			if ( rc != MCO_S_OK ) {				printf( "\n\terror:%d", rc );				break;			}			prnObject(&areaCode);			rc = mco_cursor_next(trn,&csr);			if ( rc == MCO_S_OK )			{				int rsl;				rc = AreaCode_IareaCode_compare(trn,&csr,strAreaCode,(uint2)(strlen(strAreaCode)),&rsl);				if ( rc != MCO_S_OK ) {					printf( "\n\terror:%d", rc );					break;				}				if (rsl) break;			}		}	}else printf("Not found ExactMatch for key %s:\n",strAreaCode);				rc = mco_trans_commit( trn );	if ( rc != MCO_S_OK )		printf("Commit error %d !\n",rc);}void searchPrefix( mco_db_h db, const char * strAreaCodePref ){	MCO_RET                 rc = 0;	mco_trans_h             trn;	AreaCode            areaCode;	mco_cursor_t            csr;	uint2				sz = strlen(strAreaCodePref);		mco_trans_start( db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &trn );		rc = AreaCode_IareaCode_index_cursor( trn, &csr );	rc = AreaCode_IareaCode_prefix_match(trn, &csr, strAreaCodePref, sz);	if ( rc == MCO_S_OK )	{		int found = 0;				while (rc == MCO_S_OK)		{			int rsl;			rc = AreaCode_IareaCode_compare(trn,&csr,strAreaCodePref,sz,&rsl);			if ( rc != MCO_S_OK ) {				printf( "\n\terror:%d", rc );				break;			}//			printf("rsl = %d\n",rsl);			if (rsl)			{				if (rsl<=-17) goto lNext;				else break;			}			if (!found)				printf("Found PrefixMatch for key %s:\n",strAreaCodePref);			found = 1;						rc = AreaCode_from_cursor( trn, &csr, &areaCode );			if ( rc != MCO_S_OK ) {				printf( "\n\terror:%d", rc );				break;			}			prnObject(&areaCode);lNext:					rc = mco_cursor_prev(trn,&csr);		}		if (!found) printf("Not found PrefixMatch for key %s:\n",strAreaCodePref);			}else printf("Not found PrefixMatch for key %s:\n",strAreaCodePref);			rc = mco_trans_commit( trn );		if ( rc != MCO_S_OK )		printf("Commit error %d !\n",rc);	}void searchLongest( mco_db_h db, const char * strAreaCodePref ){	MCO_RET                 rc = 0;	mco_trans_h             trn;	AreaCode            areaCode;	mco_cursor_t            csr;	int					longestR = 0;	char				cycle = 0;	uint2				sz = strlen(strAreaCodePref);			mco_trans_start( db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &trn );		rc = AreaCode_IareaCode_index_cursor( trn, &csr );	rc = AreaCode_IareaCode_longest_match(trn, &csr, strAreaCodePref,sz);	if ( rc == MCO_S_OK )	{		int found = 0;				while (rc == MCO_S_OK)		{			int rsl;			rc = AreaCode_IareaCode_compare(trn,&csr,strAreaCodePref,sz,&rsl);			if ( rc != MCO_S_OK ) {				printf( "\n\terror:%d", rc );				break;			}			if (rsl) break;			if (!found)				printf("Found LongestMatch for key %s:\n",strAreaCodePref);			found = 1;						rc = AreaCode_from_cursor( trn, &csr, &areaCode );			if ( rc != MCO_S_OK ) {				printf( "\n\terror:%d", rc );				break;			}			prnObject(&areaCode);						rc = mco_cursor_prev(trn,&csr);		}		if (!found) printf("Not found LongestMatch for key %s:\n",strAreaCodePref);			}else printf("Not found LongestMatch for key %s:\n",strAreaCodePref);			rc = mco_trans_commit( trn );		if ( rc != MCO_S_OK )		printf("Commit error %d !\n",rc);	}void doGoogle( mco_db_h db ){//////////////////////////////////////////////////////////////////////////// Exact search	printf("\n//////////////////////////////////////\n");	printf("ExactMatch function demonstration:\n\n");		searchExact( db, "01");	searchExact( db, "055");	searchExact( db, "5");	searchExact( db, "05");	searchExact( db, "06");	searchExact( db, "07");//////////////////////////////////////////////////////////////////////////// prefixSearch		printf("\n//////////////////////////////////////\n");	printf("PrefixMatch function demonstration:\n\n");	searchPrefix( db, "0190");	searchPrefix( db, "055");	searchPrefix( db, "589");	searchPrefix( db, "051");	searchPrefix( db, "0511");	searchPrefix( db, "05189");	searchPrefix( db, "0668889");	searchPrefix( db, "0698889");	searchPrefix( db, "071111111");//////////////////////////////////////////////////////////////////////////// longestSearch		printf("\n//////////////////////////////////////\n");	printf("LongestMatch function demonstration:\n\n");	searchLongest( db, "0190");	searchLongest( db, "055");	searchLongest( db, "589");	searchLongest( db, "051");	searchLongest( db, "0511");	searchLongest( db, "05189");	searchLongest( db, "0668889");	searchLongest( db, "0698889");	searchLongest( db, "071111111");		printf("\n" );}#endif //_STR_OBJECT_TEST_

⌨️ 快捷键说明

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