設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 3505|回復(fù): 3
打印 上一主題 下一主題

[模塊/函數(shù)] 轉(zhuǎn)換為無聲調(diào)拼音自定義函數(shù)(方法二)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2011-6-19 20:59:32 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
本帖最后由 tanhong 于 2011-6-21 19:15 編輯

之前發(fā)過一個將拼音轉(zhuǎn)換為無聲調(diào)拼音函數(shù),是通過數(shù)組方法實(shí)現(xiàn)(請參看之前所發(fā)實(shí)例),但在實(shí)際運(yùn)行中發(fā)現(xiàn)調(diào)用要慢很多,將其做了一些改進(jìn),用循環(huán)比對方法,速度提高不少,發(fā)上來分享一下.

  1. '枚舉無聲調(diào)拼音輸出常量
  2. Enum NotTonesPinyin
  3.      NOTONESPINYIN = 1                '無聲調(diào)拼音
  4.      NUMTIONES= 2                     '聲調(diào)數(shù)字標(biāo)識
  5. End Enum
  6. '---------------------------------------------------------------------------------------------------
  7. '功能:實(shí)現(xiàn)拼音的轉(zhuǎn)換,如:bāo --> bao ,獲得拼的聲調(diào):如:bāo 聲調(diào)為:1
  8. '輸入:strPy字符串變量,為有聲調(diào)拼音,
  9. '      OutputType 可選參數(shù),默認(rèn)參數(shù)值: "1"無聲調(diào)拼音, "2"聲調(diào)數(shù)標(biāo)識, "3"拼音和聲調(diào)數(shù)字標(biāo)識
  10. '輸出:String字符串變量
  11. '調(diào)用:1、無 聲 調(diào)  拼  音:=PinYinNumTones("bǎng")    結(jié)果為:bang
  12. '     2、聲     調(diào)     值:=PinYinNumTones("bǎng", NumTones)  結(jié)果為:3
  13. '     3、無聲調(diào)拼音及聲調(diào)值:=PinYinNumTones("bǎng",NoTonesPinYin + NumTones) 結(jié)果為:bang3
  14. '編程:江羽   2011-6-16
  15. '----------------------------------------------------------------------------------------------------
  16. Public Function PinYinNumTones(ByVal strPy As String, _
  17.                                Optional OutputType As NotTonesPinyin = 1) As String
  18.     Dim I, J         As Integer             '循環(huán)變量
  19.     Dim strTones     As String              '聲調(diào)數(shù)字標(biāo)識
  20.     Dim strPinyin    As String              '無聲調(diào)拼音
  21.     Const TONESCHR = "āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜ"
  22.     Const NOTTONES = "aeiouv"
  23.     '初始變量值
  24.     strTones = 0
  25.     strPinyin = strPy
  26.     '獲得聲調(diào)數(shù)字碼及無聲調(diào)拼音
  27.     For I = 0 To 23: For J = 1 To Len(strPy)
  28.         If Mid(TONESCHR, I + 1, 1) = Mid(strPy, J, 1) Then
  29.            '將無音標(biāo)拼音及聲調(diào)數(shù)值分別賦值給變量
  30.            strPinyin = Replace(strPy, Mid(strPy, J, 1), Mid(NOTTONES, I \ 4 + 1, 1))
  31.            strTones = I Mod 4 + 1
  32.            GoTo ChrOutput  '替換完后跳出,以期提高速度
  33.         End If
  34.     Next: Next
  35. ChrOutput:
  36.     '按要求輸出結(jié)果
  37.     Select Case OutputType
  38.         Case 1                            '替換不含聲調(diào)拼音
  39.             PinYinNumTones = strPinyin
  40.         Case 2                            '輸出聲調(diào)數(shù)字碼
  41.             PinYinNumTones = strTones
  42.         Case 3                            '以數(shù)字標(biāo)識聲調(diào)輸出拼音
  43.             PinYinNumTones = strPinyin & strTones
  44.     End Select
  45. End Function

復(fù)制代碼

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2011-6-20 12:15:35 | 只看該作者
老兄的代碼越來越成熟
3#
 樓主| 發(fā)表于 2011-6-20 12:40:35 | 只看該作者
tmtony 發(fā)表于 2011-6-20 12:15
老兄的代碼越來越成熟

謝謝老大支持,不斷學(xué)習(xí),不斷進(jìn)步……
4#
 樓主| 發(fā)表于 2011-6-27 11:39:43 | 只看該作者
本帖最后由 tanhong 于 2011-6-28 08:46 編輯

根據(jù)葉版的建議,對代碼做了改進(jìn),減去了一個不必要的循環(huán),如下:
  1. Public Function PinYinNumTones(ByVal strPy As String, _
  2.                                Optional OutputType As NotTonesPinyin = 1) As String

  3.     Dim I           As Integer           '循環(huán)變量
  4.     Dim strTones     As String            '聲調(diào)數(shù)字標(biāo)識
  5.     Dim strPinyin    As String            '無聲調(diào)拼音

  6.     Const TONESCHR = "āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜ"
  7.     Const NOTTONES = "aeiouv"

  8.     '初始變量值
  9.     strTones = 0
  10.     strPinyin = strPy

  11.     '獲得聲調(diào)數(shù)字碼
  12.     For I = 0 To 23
  13.         If InStr(1, strPy, Mid(TONESCHR, I + 1, 1)) > 0 Then
  14.            '將無音標(biāo)拼音及聲調(diào)數(shù)值分別賦值給變量
  15.            strPinyin = Replace(strPy, Mid(TONESCHR, I + 1, 1), Mid(NOTTONES, I \ 4 + 1, 1))
  16.            strTones = I Mod 4 + 1
  17.            GoTo ChrOutput  '替換完后跳出,以期提高速度
  18.         End If
  19.     Next

  20. ChrOutput:

  21.     '按要求輸出結(jié)果
  22.     Select Case OutputType
  23.         Case 1                            '替換不含聲調(diào)拼音
  24.             PinYinNumTones = strPinyin
  25.         Case 2                            '輸出聲調(diào)數(shù)字碼
  26.             PinYinNumTones = strTones
  27.         Case 3                            '以數(shù)字標(biāo)識聲調(diào)輸出拼音
  28.             PinYinNumTones = strPinyin & strTones
  29.     End Select
  30. End Function
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:32 , Processed in 0.162451 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表