如何用AU3实现识别中文的首字母[已解决]
本帖最后由 xwt620 于 2012-4-13 23:20 编辑比如将
我们
你们
他们
程序处理后结果为
wm
nm
tm 回复 1# xwt620
你需要有汉字拼音对应表。
用au3查这个表就可以了 本帖最后由 user3000 于 2012-4-3 00:50 编辑
论坛中有相关UDF的帖子, 想不起帖子的名字了. 可以自己慢慢找UDF区的相关帖子.
这里上传它的 UDF 文件给你. (汗, 有错别字, 已编辑并更正)
谢谢,做个记号 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
3mile 发表于 2012-4-3 09:45 http://www.autoitx.com/images/common/back.gif
测试成功,谢谢 5楼的源码够得我消化了 现在上班 没有办法测试,晚上回去慢慢看。。 回复 5# 3mile
可以用来做首字母查询 回复 8# zldfsz
读音排序更合适 本帖最后由 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 回复 5# 3mile
用10楼http://www.autoitx.com/images/common/back.gif的文字’32爱好2(是钱4”:槑囧‘测试才发现标点符号也被转了 回复 3# user3000
谢谢分享! 回复 5# 3mile
谢谢~就是要这个功能~ 一个比一个强,学习了. 本帖最后由 YGYL 于 2012-9-29 21:15 编辑
UDF_AscII2Alpha_SnT_Exchange.au3 像转 没有正确返回多音
298311657 的某些情况下 中文转换会遗漏
3mile实测 速度最快(含英文的情况)
页:
[1]
2