所以要先对txt文件进行筛选,只留下简体汉字跟拼音,代码如下(WinDev语言,法文版) MonBuffer est un Buffer MonBuffer = fChargeTexte(C:Usersstagiaire57DesktopNotesBD_donnecedit.txt) MaCha?ne est une cha?ne UNICODE MaCha?ne = MonBuffer nI
所以要先对txt文件进行筛选,只留下简体汉字跟拼音,代码如下(WinDev语言,法文版)
MonBuffer est un Buffer
MonBuffer = fChargeTexte("C:Usersstagiaire57DesktopNotesBD_donnecedit.txt")
MaCha?ne est une cha?ne UNICODE
MaCha?ne = MonBuffer
nIDFichier est int= fOuvre("C:Usersstagiaire57DesktopNotesBD_donnecedittestSimplifie.txt", foLectureEcriture)
i est un int=1
TANTQUE ExtraitLigne(MaCha?ne,i)<> EOT //<>是不等于的意思,就是说只要不等边界付就继续执行,一旦等于就停止执行。
unechaine est une cha?ne=ExtraitLigne(MaCha?ne,i)
//sUneNouvelleChaine1 est une cha?ne=ExtraitCha?ne(unechaine,1," ",DepuisDébut)
sUneNouvelleChaine2 est une cha?ne=ExtraitCha?ne(unechaine,2," ",DepuisDébut)
sUneNouvelleChaine3 est une cha?ne=ExtraitCha?ne(unechaine,2,["[","]"," and "])
sUneNouvelleChaine4 est une cha?ne=sUneNouvelleChaine2+TAB+sUneNouvelleChaine3
fEcritLigne(nIDFichier,sUneNouvelleChaine4)
i++
FIN
可以看出WinDev非常方便,几行代码就解决了可能其他语言要写一页的代码。处理后的txt文件如下:
那么现在大家可以清楚地看到,原始txt文件里面的拼音虽然有声调,但是都是用数组表示的,并没有真正的显示在字母上面,下面就是我的程序的新颖的地方,我把声调加在了相应的字母上面,然后再把数据放到数据库里面。代码如下:
PROCEDURE DetectAndChange(UnPinyin):UNICODE 字符串
sTestString 是一个 UNICODE 字符串=Middle(UnPinyin,Size(UnPinyin),1)
sLetterAreplace 是一个 UNICODE 字符串=""
sLetterReplace 是一个 UNICODE 字符串=""
nFound 是一个整数=0
IF FindVowel(UnPinyin,"a")=True THEN
n发现=1
sLetterAreplace="a"
根据 sChaineTest
案例“1”
sLetterReplace="ā"
案例“2”
sLetterReplace="á"
案例“3”
sLetterReplace="ǎ"
案例“4”
sLetterReplace="至"
案例“5”
sLetterReplace="a"
其他案例
重新发送Un拼音
结束
结束
IF nFound=0 _AND_ FindVowel(UnPinyin,"o")=True 那么
n发现=1
sLetterAreplace="o"
根据 sChaineTest
案例“1”
sLetterReplace="ō"
案例“2”
sLetterReplace="ó"
案例“3”
sLetterReplace="ǒ"
案例“4”
sLetterReplace="ò"
案例“5”
sLetterReplace="o"
其他案例
重新发送Un拼音
结束
结束
IF nFound=0 _AND_ FindVowel(UnPinyin,"e")=True 那么
n发现=1
sLetterAreplace="e"
根据 sChaineTest
案例“1”
sLetterReplace="ē"
案例“2”
sLetterReplace="é"
案例“3”
sLetterReplace="ě"
案例“4”
sLetterReplace="è"
案例“5”
sLetterReplace="e"
其他案例
重新发送Un拼音
结束
结束
IF nFound=0 _AND_ FindVowel(UnPinyin,"i")=True 那么
n发现=1
sLetterAreplace="i"
根据 sChaineTest
案例“1”
sLetterReplace="ī"
案例“2”
sLetterReplace="í"
案例“3”
sLetterReplace="ǐ"
案例“4”
sLetterReplace="ì"
案例“5”
sLetterReplace="i"
其他案例
重新发送Un拼音
结束
结束
IF nFound=0 _AND_ FindVowel(UnPinyin,"u")=True 那么
n发现=1
sLetterAreplace="u"
根据 sChaineTest
案例“1”
sLetterReplace="ū"
案例“2”
sLetterReplace="ú"
案例“3”
sLetterReplace="ǔ"
案例“4”
sLetterReplace="ù"
案例“5”
sLetterReplace="u"
其他案例
重新发送Un拼音
结束
结束
IF nFound=0 _AND_ FindVowel(UnPinyin,"v")=True 那么
n发现=1
sLetterAreplace="u:"
根据 sChaineTest
案例“1”
sLetterReplace="ǖ"
案例“2”
sLetterReplace="ǘ"
案例“3”
sLetterReplace="ǚ"
案例“4”
sLetterReplace="ǜ"
案例“5”
sLetterReplace="ü"
其他案例
重新发送Un拼音
结束
结束
如果 nFound=0 那么
重新发送Un拼音
结束
sUnPinyinReplaces 是一个字符串 UNICODE=Replaces(UnPinyin,sLetterAreplaces,sLetterReplaces)
RESEND Middle(sUnPinyinReplaces,1,Size(sUnPinyinReplaces)-1)
程序 ChangePinyinAccent()
MyBuffer 是一个缓冲区
MyBuffer = fLoadText("C:Userstrainee57DesktopPinyinTest.txt")
MyString 是一个 UNICODE 字符串
MyString = MyBuffer
HOpen(更改拼音1)
i 是一个 int=1
WHILE ExtractLine(MyString,i)<>结束时间
PinyinFinale 是一个 UNICODE 字符串=""
astring 是一个字符串=ExtractLine(MyString,i)
ChangePinyin1.Hanzi=ExtractString(somestring,1,TAB)
PinyinInitial 是一个字符串 UNICODE=ExtractString(somestring,2,TAB)
number 是一个整数=1
循环
APinyin 是一个字符串 UNICODE=ExtractString(InitialPinyin,number," ",FromStart)
数字++
IF UnPinyin=EOT THEN EXIT
PinyinFinale+=DetectANDchange(UnPinyin)
IF ExtractString(PinyinInitial,number," ",FromStart)<>EOT THEN PinyinFinal+=" "
结束
ChangePinyin1.Pinyin=PinyinFinal
HAdd(更改拼音1)
我++
结束
程序搜索元音(非拼音,字母):boolean
i 是一个整数=1
lengthUnPinyin 是一个整数 = Size(UnPinyin)
如果字母=“v”那么
循环
stringInstant 是一个字符串 UNICODE=Middle(OnePinyin,i,1)
IF stringInstant="u" AND Middle(UnPinyin,i+1,1)=":"THEN
RENVOYER Vrai
FIN
SI i=longuerUnPinyin ALORS
RENVOYER Faux
FIN
i++
FIN
FIN
SI lettre="u" ALORS
BOUCLE
chaineInstant est une cha?ne UNICODE=Milieu(UnPinyin,i,1)
SI chaineInstant=lettre ET Milieu(UnPinyin,i+1,1)<>":" ALORS
RENVOYER Vrai
FIN
SI i=longuerUnPinyin ALORS
RENVOYER Faux
FIN
i++
FIN
FIN
BOUCLE
chaineInstant est une cha?ne UNICODE=Milieu(UnPinyin,i,1)
SI chaineInstant=lettre ALORS
RENVOYER Vrai
FIN
SI i=longuerUnPinyin ALORS
RENVOYER Faux
FIN
i++
FIN
最终的数据库如下:
好了所有的数据库程序就这些,可以看出WinDev真的是一门很方便的语言,它的数据库是HyperSQL,但是这个语言也可以往其他的数据库中写数据。
希望文章对大家有帮助。