xwt620 发表于 2012-4-2 18:16:45

如何用AU3实现识别中文的首字母[已解决]

本帖最后由 xwt620 于 2012-4-13 23:20 编辑

比如将
我们
你们
他们
程序处理后结果为
wm
nm
tm

happytc 发表于 2012-4-2 18:24:20

回复 1# xwt620


    你需要有汉字拼音对应表。
用au3查这个表就可以了

user3000 发表于 2012-4-2 20:44:14

本帖最后由 user3000 于 2012-4-3 00:50 编辑

论坛中有相关UDF的帖子, 想不起帖子的名字了. 可以自己慢慢找UDF区的相关帖子.
这里上传它的 UDF 文件给你. (汗, 有错别字, 已编辑并更正)

whitehead 发表于 2012-4-2 20:50:59

谢谢,做个记号

3mile 发表于 2012-4-3 09:45:09

Global Const $key=['吖','八','擦','耷','俄','发','噶','哈','丌','丌','卡','拉','马','拿','哦','趴','七','然','撒','他','挖','挖','挖','西','丫','匝','匝']
Global $str='测试中文拼音首字母',$L
For $i = 1 To StringLen($str)
      Switch Dec(StringTrimLeft(StringToBinary(StringMid($str,$i,1)),2))
                Case 32 To 127
                        $L&=StringMid($str,$i,1)
                Case 33095 To 62289
                        $L&=Chr(97+_C(StringMid($str,$i,1),0,26))
      EndSwitch
Next
MsgBox(0,'',$L)
Func _C($s,$f,$e)                              ;改进的中值法
                Local $mid=Int(($e-$f)/2)+$f
                If $mid=$f Then Return $f
            If StringCompare($s,$key[$mid])=0 Then
                  Return $mid
            ElseIf StringCompare($s,$key[$mid])>0 Then
                Return _C($s,$mid,$e)
            ElseIf StringCompare($s,$key[$mid])<0 Then
                Return _C($s,$f,$mid)
                EndIf
EndFunc

whitehead 发表于 2012-4-3 11:09:44


3mile 发表于 2012-4-3 09:45 http://www.autoitx.com/images/common/back.gif

测试成功,谢谢

zch11230 发表于 2012-4-3 11:23:30

5楼的源码够得我消化了 现在上班 没有办法测试,晚上回去慢慢看。。

zldfsz 发表于 2012-4-3 11:50:13

回复 5# 3mile


    可以用来做首字母查询

netegg 发表于 2012-4-3 13:41:30

回复 8# zldfsz
读音排序更合适

298311657 发表于 2012-4-3 23:46:05

本帖最后由 298311657 于 2012-4-4 01:05 编辑

根据GB编码写的一个函数,只能识别3755 个常用汉字,所以测试字符串的槑囧两个字取不到首拼字母
比起5L 3mile大侠的函数弱了很多,不过因为没有使用递归,所以效率也好很多。如果只处理常用汉字,可以选择这个,如果要处理所有汉字(常用+生僻+繁简),就使用3mile大侠的函数吧
Global Const $secPosValueList = [ 1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249, 5600 ]
Global Const $firstLetter = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'w', 'x', 'y', 'z' ]
MsgBox(0,'',GetPy('32爱好2(是钱4”:槑囧'))

Func GetPy($mystr)
        Local $py, $tmp, $byte, $secPosValue
        For $j = 1 To StringLen($mystr)
                $tmp = ""
                $byte = StringToBinary(StringMid($mystr,$j,1))
                $secPosValue = (Dec(Hex(BinaryMid($byte,1,1)))-160)*100 + (Dec(Hex(BinaryMid($byte,2,1)))-160)
                For $i = 0 To 22
                        If ($secPosValue >= $secPosValueList[$i] And $secPosValue < $secPosValueList[$i + 1]) Then
                                $tmp = $firstLetter[$i]
                                ExitLoop
                        EndIf
                Next
                If $tmp = "" Then
                        $py &= StringMid($mystr,$j,1)
                Else
                        $py &= $tmp
                EndIf
        Next
        If StringLen($py) Then Return $py
        Return $mystr
EndFunc

zldfsz 发表于 2012-4-7 22:44:24

回复 5# 3mile
用10楼http://www.autoitx.com/images/common/back.gif的文字’32爱好2(是钱4”:槑囧‘测试才发现标点符号也被转了

xwlzx 发表于 2012-4-8 09:35:28

回复 3# user3000


    谢谢分享!

xwt620 发表于 2012-4-13 23:20:07

回复 5# 3mile


    谢谢~就是要这个功能~

nian_jin 发表于 2012-5-1 01:09:40

一个比一个强,学习了.

YGYL 发表于 2012-9-29 21:14:05

本帖最后由 YGYL 于 2012-9-29 21:15 编辑

UDF_AscII2Alpha_SnT_Exchange.au3 像转 没有正确返回多音
298311657 的某些情况下 中文转换会遗漏
3mile实测 速度最快(含英文的情况)
页: [1] 2
查看完整版本: 如何用AU3实现识别中文的首字母[已解决]