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