www.pudn.com > QRAPPuie.rar > Infoparse.cpp


#include "StdAfx.h" 
#include "Infoparse.h" 
//#define MAXLENGTH 652 
Infoparse::Infoparse(void) 
:  m_szapptype(_T("")) 
, m_szname(_T("")) 
, m_sztitle(_T("")) 
, m_szdepartment(_T("")) 
, m_szcopration(_T("")) 
, m_szaddress(_T("")) 
, m_szzipcode(_T("")) 
, m_sztelephone(_T("")) 
, m_szmobile(_T("")) 
, m_szfax(_T("")) 
, m_szemail(_T("")) 
, m_szurl(_T("")) 
, m_szSm(_T("")) 
, m_szTo(_T("")) 
, m_szCt(_T("")) 
, m_szTxt(_T("")) 
, m_szIntr(_T("")) 
, m_szType(_T("")) 
, m_szLen(_T("")) 
, m_szFile(_T("")) 
, m_szCr(_T("")) 
, m_szSub(_T("")) 
, m_szDg(_T("")) 
, m_szSid(_T("")) 
, m_szCardinfo(_T("")) 
{ 
} 
 
Infoparse::~Infoparse(void) 
{ 
} 
 
 
 
BOOL Infoparse::CardDataParse_Uni( const TCHAR* carddata,int cardlen) 
{ 
	int nTmpvallen  =0; 
	int nTmpnamelen =0; 
	int  pos     = 0; 
	int nextpos  = 0; 
 
	const TCHAR* cur   = carddata; 
	int totallen =cardlen; 
 
	if( totallen > MAX_QRSTRING_LENGTH) 
		return FALSE; 
 
	m_szCardinfo = carddata; 
 
	int nMaxVallen = MAX_QRSTRING_LENGTH;  
	int nMaxNamelen = MAX_QRSTRING_LENGTH;  
	LPTSTR pszTmpval = new TCHAR[nMaxVallen]; 
	LPTSTR pszTmpname = new TCHAR[nMaxNamelen]; 
	ZeroMemory(pszTmpval,sizeof(TCHAR)*nMaxVallen); 
	ZeroMemory(pszTmpname,sizeof(TCHAR)*nMaxNamelen); 
 
	if (!ReadFiledName_Uni(cur+pos,totallen-pos,pszTmpname,&nTmpnamelen,&nextpos)) 
		{ 
			delete []pszTmpval; 
			pszTmpval = NULL; 
			delete []pszTmpname; 
			pszTmpname = NULL; 
	 		return FALSE; 
		} 
	else  
	{ 
		pos+=nextpos; 
	} 
	m_szapptype = pszTmpname; 
	ZeroMemory(pszTmpname,sizeof(TCHAR)*nMaxNamelen); 
 
	while (*(cur+pos) != _T(';')) 
	{ 
	 	if (!ReadFiledName_Uni(cur+pos,totallen-pos,pszTmpname,&nTmpnamelen,&nextpos)) 
	 	{ 
			delete []pszTmpval; 
			pszTmpval = NULL; 
			delete []pszTmpname; 
			pszTmpname = NULL; 
	 		return FALSE; 
	 	} 
		else 
		{ 
		        pos+=nextpos; 
		} 
 
	    if (!ReadFiledValue_Uni(cur+pos,totallen-pos,pszTmpval,&nTmpvallen,&nextpos)) 
	    { 
			delete []pszTmpval; 
			pszTmpval = NULL; 
			delete []pszTmpname; 
			pszTmpname = NULL; 
			return FALSE; 
	    } 
		else 
		{ 
		       pos+=nextpos; 
		} 
	       AddFiled_Uni(pszTmpname,nTmpnamelen,pszTmpval,nTmpvallen); 
 
		   ZeroMemory(pszTmpval,sizeof(TCHAR)*nMaxVallen); 
		   ZeroMemory(pszTmpname,sizeof(TCHAR)*nMaxNamelen); 
 
	} 
 
	delete []pszTmpval; 
	pszTmpval = NULL; 
	delete []pszTmpname; 
	pszTmpname = NULL; 
	return TRUE; 
 
} 
 
 
 
BOOL Infoparse::ReadFiledName_Uni(const TCHAR* p,int inlen,TCHAR* outvalue,int* outlen,int* nextpos)//读属性名 
{ 
	const TCHAR* cur = NULL; 
	cur = p; 
	int i = 0; 
 	while (cur