找回密码
 加入
搜索
查看: 3678|回复: 3

[效率算法] 自动识别计算机名并对应语音文件,请教用正则提取字母和数字[已解决]

[复制链接]
发表于 2012-7-17 22:44:37 | 显示全部楼层 |阅读模式
本帖最后由 nivisde 于 2012-7-18 00:41 编辑

在写一个语音呼叫网管的工具,计算机名获取到的,但是现在要语音播报对应的机器号。
有个问题难住了。

本来我想是这样识别计算机名的
计算机名,从右至坐一步一步分割单个长度,然后根据字符是否是字母然后停止分隔,并记录改位置。
然后就可以分隔出来后面的数字部分,和前面的字母部分。
然后分别分隔字符部分和数字部分对应到相应的语音文件。

有个问题就是如果别人的计算机名前缀有字母数字混合,例如 A1B如此就麻烦得大了。
且上面的方法效率很低,能力有限也只能用这样的笨方法了。

请会正则的朋友帮个忙,
用正则表达式 分隔出 计算机名中的 前面字母部分和后面的数字部分。先谢谢了

评分

参与人数 1金钱 +10 收起 理由
user3000 + 10 描述问题很清晰详细, 看得舒服!

查看全部评分

发表于 2012-7-17 23:26:01 | 显示全部楼层
回复 1# nivisde

Local $computerName = 'PC _088_ AB'
Local $str = StringRegExp($ComputerName, '^(\D*)\d*', 1)
If Not @error Then MsgBox(0, '提取数字前面所有字符', $str[0])

$str = StringRegExp($ComputerName, '^([[:alpha:]]*)\d*', 1)
If Not @error Then MsgBox(0, '只提取前面字母', $str[0])

$str = StringRegExp($ComputerName, '\d*([[:alpha:]]*)$', 1)
If Not @error Then MsgBox(0, '只提取后面字母', $str[0])

Local $num = StringRegExp($ComputerName, '^\D*(\d*)', 1)
If Not @error Then MsgBox(0, '数字', $num[0])
 楼主| 发表于 2012-7-18 00:30:07 | 显示全部楼层
本帖最后由 nivisde 于 2012-7-18 00:37 编辑

谢楼上,我用自己的方法弄了个。贴上代码
Func NOTICE($COMPUTERNAME)
        Local $sound
        Local $INDEX=0
        Local $COMPUTERNAME_STR
        Local $COMPUTERNAME_NUM
        Local $COMPUTERNAME_STR_ARRAY[1]=[0]
        Local $COMPUTERNAME_NUM_ARRAY[1]=[0]
        $COMPUTERNAME_LEN=IniRead($SERVER_CONFIG,"SecuritySrv","COMPUTERLEN","100000")
        If $COMPUTERNAME_LEN=100000 Then
                MsgBox(0+48+262144,"提示","测试/免费 用户不提供计算机名语音播报功能,付费用户联系客服解决此问题",3)
        Else
                $COMPUTERNAME_STR=StringLeft($COMPUTERNAME,$COMPUTERNAME_LEN)
                $COMPUTERNAME_NUM=StringMid($COMPUTERNAME,($COMPUTERNAME_LEN+1))
                For $INDEX=1 To StringLen($COMPUTERNAME_STR)
                        ReDim $COMPUTERNAME_STR_ARRAY[$INDEX+1]
                        $COMPUTERNAME_STR_ARRAY[$INDEX]=StringMid($COMPUTERNAME_STR,$INDEX,1)
                        $COMPUTERNAME_STR_ARRAY[0]+=1
                Next
;分解计算机名字母部分装入数组
                For $INDEX=1 To StringLen($COMPUTERNAME_NUM)
                        ReDim $COMPUTERNAME_NUM_ARRAY[$INDEX+1]
                        $COMPUTERNAME_NUM_ARRAY[$INDEX]=StringMid($COMPUTERNAME_NUM,$INDEX,1)
                        $COMPUTERNAME_NUM_ARRAY[0]+=1
                Next
;分解计算机名数字部分装入数组
                $sound = _SoundOpen("sound\Zgzryqzy.wav")
                If Not @error Then
                        _SoundPlay($sound,1)
                Else
                        MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                EndIf
                _SoundClose($sound) ;播放工作人员请注意 语音文件
                For $INDEX=1 To $COMPUTERNAME_STR_ARRAY[0]
                        $COMPUTERNAME_STR_ARRAY[$INDEX]=StringUpper($COMPUTERNAME_STR_ARRAY[$INDEX])
                        $sound = _SoundOpen("sound"&$COMPUTERNAME_STR_ARRAY[$INDEX]&".wav")
                        If Not @error Then
                                _SoundPlay($sound,1)
                        Else
                                MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                        EndIf
                        _SoundClose($sound)        
                Next ;播放字母对应 语音文件
                For $INDEX=1 To $COMPUTERNAME_NUM_ARRAY[0]
                        $COMPUTERNAME_NUM_ARRAY[$INDEX]=StringUpper($COMPUTERNAME_NUM_ARRAY[$INDEX])
                        $sound = _SoundOpen("sound"&$COMPUTERNAME_NUM_ARRAY[$INDEX]&".wav")
                        If Not @error Then
                                _SoundPlay($sound,1)
                        Else
                                MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                        EndIf
                        _SoundClose($sound)        
                Next ;播放数字对应 语音文件
                $sound = _SoundOpen("sound\Zhj.wav")
                If Not @error Then
                        _SoundPlay($sound,1)
                Else
                        MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                EndIf
                _SoundClose($sound) ;播放机号语音文件
        EndIf
EndFunc
 楼主| 发表于 2012-7-18 00:30:19 | 显示全部楼层
本帖最后由 nivisde 于 2012-7-18 00:56 编辑

哈哈,我笨了。直接分解整个计算机名称就是了。哎。。
Func NOTICE($COMPUTERNAME)
        Local $sound
        Local $INDEX=0
        Local $COMPUTERNAME_ARRAY[1]=[0]
        For $INDEX=1 To StringLen($COMPUTERNAME)
                ReDim $COMPUTERNAME_ARRAY[$INDEX+1]
                $COMPUTERNAME_ARRAY[$INDEX]=StringMid($COMPUTERNAME,$INDEX,1)
                $COMPUTERNAME_ARRAY[0]+=1
        Next
        $sound = _SoundOpen("sound\Zgzryqzy.wav")
        If Not @error Then
                _SoundPlay($sound,1)
        Else
                MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
        EndIf
        _SoundClose($sound)
        For $INDEX=1 To $COMPUTERNAME_ARRAY[0]
                $COMPUTERNAME_ARRAY[$INDEX]=StringUpper($COMPUTERNAME_ARRAY[$INDEX])
                $sound = _SoundOpen("sound"&$COMPUTERNAME_ARRAY[$INDEX]&".wav")
                If Not @error Then
                        _SoundPlay($sound,1)
                Else
                        MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
                EndIf
                _SoundClose($sound)        
        Next
        $sound = _SoundOpen("sound\Zhj.wav")
        If Not @error Then
                _SoundPlay($sound,1)
        Else
                MsgBox(0+48+262144,"提示","打开声音文件错误,不能播放声音!",2)
        EndIf
        _SoundClose($sound)
EndFunc
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-24 16:14 , Processed in 0.416717 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表