程序中经常要将汉字转化为拼音,但用文本实现对照比较慢,于是需要生成拼音数据库
关于原理,请参见《在VFP中编程自动产生所输入汉字的拼音》(肇庆加美海外学校 张镜明)
1.需要准备对应数据库py.mdb,其中设置空表py,设计表项目han和py,分别存放汉字和对应的拼音
2.按照《在VFP中编程自动产生所输入汉字的拼音》中介绍进行拼音输入法的逆转换,保存为py.txt
注意:py.txt需保存为ansi模式[使用文本编辑器的另存为功能]
3.开始设计使用数据库的部分,应用ado技术
3.1 在"stdafx.h"中加入代码段
#import "c:/program files/common files/system/ado/msado15.dll"
no_namespace rename( "EOF", "adoEOF" )//连接ado需要
#include "ICRSINT.H"
3.2 连接数据库
应用代码段
::CoInitialize(NULL);
_ConnectionPtr m_pConnection;
// 连接ado需要变量
try{
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://Pro//FileName//FileName0
//Debug//py.mdb;","","",NULL);
}
catch(...)
{
AfxMessageBox("数据库连接失败!");
}
//连接完成
[由于不需要使用记录集,所以只定义m_pConnection一个数据变量]
3.3 关闭数据库
应用代码段
//退出ado连接
m_pConnection->Close();
::CoUninitialize();
[打开必然需要关闭!]
4.处理文件部分
应用代码段
//读取文件
CStdioFile file;
CString string;
CString Han;
CString PY;
file.Open("D://Pro//FileName//FileName0//Debug//py.txt",CFile::modeRead|CFile::typeText);
file.SeekToBegin();
file.ReadString(string);
while(!string.IsEmpty())
{
Han=string.Left(2);
PY=string.Right(string.GetLength()-2);
int temp=PY[1];
if ((temp>64)&&(temp<123))
{
CString sql;
//数据库写入
sql.Format("insert into PY(Han,PY) values('%s','%s')",Han,PY);
m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText); 、
//数据库写入结束
}
file.ReadString(string);
}
file.Close();
//读取完毕
由于考虑到只使用简单的文件读入,所以使用了CStdioFile类,核心思想参见文章《在VFP中编程自动产生所输入汉字的拼音》
数据库写入部分为SQL语句输入,应用ado接口
核心部分代码都在这里了
将整个按钮函数重新完整给出
void CFileName0Dlg::OnBnClickedOk()
{
::CoInitialize(NULL);
_ConnectionPtr m_pConnection;
// 连接ado需要变量
try{
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://Pro//FileName//FileName0
//Debug//py.mdb;","","",NULL);
}
catch(...)
{
AfxMessageBox("数据库连接失败!");
}
//连接完成
//读取文件
CStdioFile file;
CString string;
CString Han;
CString PY;
file.Open("D://Pro//FileName//FileName0//Debug//py.txt",CFile::modeRead|CFile::typeText);
file.SeekToBegin();
file.ReadString(string);
while(!string.IsEmpty())
{
Han=string.Left(2);
PY=string.Right(string.GetLength()-2);
int temp=PY[1];
if ((temp>64)&&(temp<123))
{
CString sql;
sql.Format("insert into PY(Han,PY) values('%s','%s')",Han,PY);
m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);
}
file.ReadString(string);
}
file.Close();
//读取完毕
//退出ado连接
m_pConnection->Close();
::CoUninitialize();
OnOK();
}
头文件的代码在前面有,有些错误处理没有做,毕竟只是个简单的程序
总结:这个程序使用最简单的ADO和CStdioFile的应用,建立完整拼音数据库的时间在1min-2min之间
需要完整程序参考或对拙作进行指导的的请Email到ikari_shinji_eva@sina.com
关于原理,请参见《在VFP中编程自动产生所输入汉字的拼音》(肇庆加美海外学校 张镜明)
1.需要准备对应数据库py.mdb,其中设置空表py,设计表项目han和py,分别存放汉字和对应的拼音
2.按照《在VFP中编程自动产生所输入汉字的拼音》中介绍进行拼音输入法的逆转换,保存为py.txt
注意:py.txt需保存为ansi模式[使用文本编辑器的另存为功能]
3.开始设计使用数据库的部分,应用ado技术
3.1 在"stdafx.h"中加入代码段
#import "c:/program files/common files/system/ado/msado15.dll"
no_namespace rename( "EOF", "adoEOF" )//连接ado需要
#include "ICRSINT.H"
3.2 连接数据库
应用代码段
::CoInitialize(NULL);
_ConnectionPtr m_pConnection;
// 连接ado需要变量
try{
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://Pro//FileName//FileName0
//Debug//py.mdb;","","",NULL);
}
catch(...)
{
AfxMessageBox("数据库连接失败!");
}
//连接完成
[由于不需要使用记录集,所以只定义m_pConnection一个数据变量]
3.3 关闭数据库
应用代码段
//退出ado连接
m_pConnection->Close();
::CoUninitialize();
[打开必然需要关闭!]
4.处理文件部分
应用代码段
//读取文件
CStdioFile file;
CString string;
CString Han;
CString PY;
file.Open("D://Pro//FileName//FileName0//Debug//py.txt",CFile::modeRead|CFile::typeText);
file.SeekToBegin();
file.ReadString(string);
while(!string.IsEmpty())
{
Han=string.Left(2);
PY=string.Right(string.GetLength()-2);
int temp=PY[1];
if ((temp>64)&&(temp<123))
{
CString sql;
//数据库写入
sql.Format("insert into PY(Han,PY) values('%s','%s')",Han,PY);
m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText); 、
//数据库写入结束
}
file.ReadString(string);
}
file.Close();
//读取完毕
由于考虑到只使用简单的文件读入,所以使用了CStdioFile类,核心思想参见文章《在VFP中编程自动产生所输入汉字的拼音》
数据库写入部分为SQL语句输入,应用ado接口
核心部分代码都在这里了
将整个按钮函数重新完整给出
void CFileName0Dlg::OnBnClickedOk()
{
::CoInitialize(NULL);
_ConnectionPtr m_pConnection;
// 连接ado需要变量
try{
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D://Pro//FileName//FileName0
//Debug//py.mdb;","","",NULL);
}
catch(...)
{
AfxMessageBox("数据库连接失败!");
}
//连接完成
//读取文件
CStdioFile file;
CString string;
CString Han;
CString PY;
file.Open("D://Pro//FileName//FileName0//Debug//py.txt",CFile::modeRead|CFile::typeText);
file.SeekToBegin();
file.ReadString(string);
while(!string.IsEmpty())
{
Han=string.Left(2);
PY=string.Right(string.GetLength()-2);
int temp=PY[1];
if ((temp>64)&&(temp<123))
{
CString sql;
sql.Format("insert into PY(Han,PY) values('%s','%s')",Han,PY);
m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);
}
file.ReadString(string);
}
file.Close();
//读取完毕
//退出ado连接
m_pConnection->Close();
::CoUninitialize();
OnOK();
}
头文件的代码在前面有,有些错误处理没有做,毕竟只是个简单的程序
总结:这个程序使用最简单的ADO和CStdioFile的应用,建立完整拼音数据库的时间在1min-2min之间
需要完整程序参考或对拙作进行指导的的请Email到ikari_shinji_eva@sina.com