64,639
社区成员
发帖
与我相关
我的任务
分享
CString Cini2View::FenGe(CString strLocalFileName1,CString NameBegin,CString NameEnd)
{ sqlite3_stmt *pstmt = 0;
const char *error = 0;
char *zErrMsg = 0;
int ret = sqlite3_open("fana.db", &m_pdb); //打开数据库,跟打开文本文件一样
if(ret!= SQLITE_OK)
{
AfxMessageBox(_T("打开数据库出错\n"));
sqlite3_close(m_pdb);
return 0;
}
//建立表
char *sql = " CREATE TABLE test(ge_id INT(4) PRIMARY KEY,name VARCHAR(30) ,valuess VARCHAR(100),formatss VARCHAR(50),description VARCHAR(200));" ;
sqlite3_exec( m_pdb , sql , 0 , 0 , &zErrMsg );
CStdioFile file;
file.Open(strLocalFileName1,CFile::modeRead);//打开文件,只读
CString str=_T(""),sum=_T("");
char* old_locale = _strdup( setlocale(LC_CTYPE,NULL));//解决汉字输入问题,对回调函数也是有效的。
setlocale( LC_CTYPE, "chs" );//设定
CString mingzi,zhi,geshi,zhushi,cons,zhuan,cha,ru,endcycle,pro,reg,res,car;
endcycle=_T("[sequences]");
cons=_T("const");
pro=_T("profile");
reg=_T("reagent");
res=_T("reservoir");
car=_T("card");
int jing=0,con=0,deng=0,fen=0,fenhao=0,youkuohao=0,prof=0,regf=0,resf=0,carf=0,zuokuohao=0,i=0;
CString substr=_T("");
while(file.ReadString(sum))
{
if(jing==sum.Find(endcycle))
{
break;
}
if(jing==sum.Find(_T('#')))
{
zhushi=sum.Right(sum.GetLength()-1);
}
else
{
if(con==sum.Find(cons))
{ //const之后,'='号之前赋值给mingzhi
zhuan=sum.Right(sum.GetLength()-con-cons.GetLength());
deng=zhuan.Find(_T('='));
mingzi=zhuan.Left(deng);
//‘=’号之后,';'之前赋值给zhi
zhuan=zhuan.Right(zhuan.GetLength()-deng-1);
fen=zhuan.Find(_T(';'));
zhi=zhuan.Left(fen);
geshi=_T("const name=n;");
//插入数据
i++;
cha=_T("INSERT INTO test (ge_id,name,valuess,formatss,description) VALUES (");
ru.Format(_T("%d,'%s','%s','%s','%s'"),i,mingzi,zhi,geshi,zhushi);
cha=cha+ru;
ru=_T(");");
cha=cha+ru;
sql = UnicodeToUtf8(cha) ;//unicode转换成utf-8编码
sqlite3_exec( m_pdb , sql, 0 , 0 , &zErrMsg );
mingzi=_T("");zhi=_T("");geshi=_T("");zhushi=_T("");ru=_T("");cha=_T("");deng=0;zhuan=_T("");
}
else
{
fenhao=sum.Find(_T(';'));
youkuohao=sum.Find(_T('}'));
if(fenhao!=-1&&youkuohao!=-1)//如果同时有;和}
{ deng=sum.Find(_T('='));
//"="号之前赋值给mingzi,之后给zhi
mingzi=sum.Left(deng);
zhi=sum.Right(sum.GetLength()-deng-1);
geshi=_T("name={n;}");
//插入数据
i++;
cha=_T("INSERT INTO test (ge_id,name,valuess,formatss,description) VALUES (");
ru.Format(_T("%d,'%s','%s','%s','%s'"),i,mingzi,zhi,geshi,zhushi);
cha=cha+ru;
ru=_T(");");
cha=cha+ru;
sql = UnicodeToUtf8(cha) ;//unicode转换成utf-8编码
sqlite3_exec( m_pdb ,sql , 0 , 0 , &zErrMsg );
mingzi=_T("");zhi=_T("");geshi=_T("");zhushi=_T("");ru=_T("");cha=_T("");deng=0;
}
else//不是同时有;和}
{ //如果有profile,reagent,reservoir,card。
if(prof==sum.Find(pro)||regf==sum.Find(reg)||resf==sum.Find(res)||carf==sum.Find(car))
{ zuokuohao=sum.Find(_T('{'));
//{之后,'='号之前赋值给mingzhi
zhuan=sum.Right(sum.GetLength()-zuokuohao-1);
deng=zhuan.Find(_T(','));
mingzi=zhuan.Left(deng);
//‘,’号之后,'}'之前赋值给zhi
zhuan=zhuan.Right(zhuan.GetLength()-deng-1);
fen=zhuan.Find(_T('}'));
zhi=zhuan.Left(fen);
geshi=_T("geshi={name,value}");
//插入数据
i++;
cha=_T("INSERT INTO test (ge_id,name,valuess,formatss,description) VALUES (");
ru.Format(_T("%d,'%s','%s','%s','%s'"),i,mingzi,zhi,geshi,zhushi);
cha=cha+ru;
ru=_T(");");
cha=cha+ru;
sql = UnicodeToUtf8(cha) ;//unicode转换成utf-8编码
sqlite3_exec( m_pdb , sql , 0 , 0 , &zErrMsg );
mingzi=_T("");zhi=_T("");geshi=_T("");zhushi=_T("");ru=_T("");cha=_T("");zhuan=_T("");
}
else
{ //如果没有profile,reagent,reservoir,card。
if(youkuohao!=-1)
{ //'='号之前给名字,之后给值。
deng=sum.Find(_T('='));
mingzi=sum.Left(deng);
deng=sum.Find(_T('{'));
zhuan=sum.Right(sum.GetLength()-deng-1);
fen=zhuan.Find(_T('}'));
zhi=zhuan.Left(fen);
geshi=_T("name={n;}");
//插入数据
i++;
cha=_T("INSERT INTO test (ge_id,name,valuess,formatss,description) VALUES (");
ru.Format(_T("%d,'%s','%s','%s','%s'"),i,mingzi,zhi,geshi,zhushi);
cha=cha+ru;
ru=_T(");");
cha=cha+ru;
sql = UnicodeToUtf8(cha) ;//unicode转换成utf-8编码
sqlite3_exec( m_pdb ,sql , 0 , 0 , &zErrMsg );
mingzi=_T("");zhi=_T("");geshi=_T("");zhushi=_T("");ru=_T("");cha=_T("");deng=0;zhuan=_T("");
}
}
}
}
}
}
file.Close();
//查询数据
sql =("SELECT * FROM test where formatss='const name=n;'");
int nrow = 0, ncolumn = 0; //查询结果集的行数、列数
char **azResult; //二维数组存放结果
sqlite3_get_table( m_pdb , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
CString str1;
str= _T("");
int j=0;
for( j=0 ; j<( nrow + 1 ) * ncolumn ; j++ )
{
str1=Utf8ToUnicode(azResult[j]);//utf-8转换为unicode编码
str.Format(L"azResult[%d]:",j);
str=str+str1+L"\n";
//Utf8ToUnicode(Mu0ltzifu(str));
//AfxMessageBox((str));
}
sqlite3_close(m_pdb); //关闭数据库
m_pdb=NULL;
setlocale( LC_CTYPE, old_locale );
free( old_locale );//还原区域设定
}
/*功能:unicode转换为utf8编码
输入:unicode类型的字符串
输出:utf8类型的char*型数据
*/
char* Cini2View::UnicodeToUtf8(CString unicode)
{
int len = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)unicode, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)unicode, -1, szUtf8, len, NULL,NULL);
szUtf8[len]= '\0';
len=len-1;
return szUtf8;
}
/*功能:utf8转换为unicode编码
输入:utf8类型的字符串
输出:unicode类型的char*型数据
*/
WCHAR * Cini2View::Utf8ToUnicode(char* unicode)
{
int len = MultiByteToWideChar(CP_UTF8, 0, unicode, -1, NULL, 0);
WCHAR *szUtf8=new wchar_t[len + 1];
memset(szUtf8, 0, len + 1);
MultiByteToWideChar (CP_UTF8, 0, unicode, -1, szUtf8, len);
szUtf8[len]= '\0';
len=len-1;
return szUtf8;
}