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

[效率算法] 如何用正则替换来实现功能?(已解决)

[复制链接]
发表于 2014-12-18 17:36:29 | 显示全部楼层 |阅读模式
本帖最后由 gzh888666 于 2014-12-19 10:09 编辑

以前学的点正则全还回去了,重新学习,请教要实现替换扩展名,并且根据相应的扩展名替换文件名的第一位,再根据文件的第一位还原扩展名。
au3.au3.rmvb
替换为
1u3.au3.rar
然后
1u3.au3.rar
再替换回
1u3.au3.rmvb
#region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_Outfile_type=a3x
#AutoIt3Wrapper_icon=C:\Windows\system32\SHELL32.dll|-24
#AutoIt3Wrapper_Outfile=E:\moveFild.a3x
#endregion ;**** 参数创建于 ACNWrapper_GUI ****
;视频保存转换
#include <Array.au3>
#include <File.au3>
Dim $jiance ;用于检测是否是压缩文件,0为是,1为不是
$lujing = "E:\360驱动大师目录\驱动备份\"
$wenjian = _FileListToArray($lujing, "*", 1)
;_ArrayDisplay($wenjian)
If _TiQuKuoZhanMing($wenjian[1]) <> "rar" Then
        For $n = 1 To UBound($wenjian) - 1
                $kuozhanming = _TiQuKuoZhanMing($wenjian[$n])
                $ChangDu = StringLen($kuozhanming)
                $xinlujing = StringTrimRight($wenjian[$n], $ChangDu) & "rar"
                If _kuozhanming_xuliehao_huhuan($kuozhanming) <> "" Then
                        $xinlujing = _kuozhanming_xuliehao_huhuan($kuozhanming) & StringTrimLeft($xinlujing, 1)
                        FileMove($lujing & $wenjian[$n], $lujing & $xinlujing)
                Else
                        MsgBox(0, "", "("& $wenjian[$n] & ")的扩展名未添加到源码!")
                EndIf
                $jiance = 1
        Next
Else
        For $n = 1 To UBound($wenjian) - 1
                $diyiwei = StringLeft($wenjian[$n], 1)
                If _kuozhanming_xuliehao_huhuan($diyiwei) <> "" Then
                        $xinlujing = StringTrimRight($wenjian[$n], 3) & _kuozhanming_xuliehao_huhuan($diyiwei)
                        FileMove($lujing & $wenjian[$n], $lujing & $xinlujing)
                Else
                        MsgBox(0, "", "("& $wenjian[$n] & ")的扩展名丢失!请手动更换尝试!")
                EndIf
                $jiance = 0
        Next
EndIf
If $jiance = 0 Then
        If MsgBox(1, "", "你确定要打开文件夹吗?") = 1 Then _ExplorerDir($lujing)
ElseIf $jiance = 1 Then
        MsgBox(0, "", "现在是压缩文件", 3)
EndIf
 
Func _kuozhanming_xuliehao_huhuan($qian);返回扩展名对应的序列号互换结果
        Local $zhuanhuanhou = ""
        Switch $qian
                Case "rmvb"
                        $zhuanhuanhou = "1"
                Case "mp4"
                        $zhuanhuanhou = "2"
                Case "avi"
                        $zhuanhuanhou = "3"
                Case "wmv"
                        $zhuanhuanhou = "4"
                Case "1"
                        $zhuanhuanhou = "rmvb"
                Case "2"
                        $zhuanhuanhou = "mp4"
                Case "3"
                        $zhuanhuanhou = "avi"
                Case "4"
                        $zhuanhuanhou = "wmv"
        EndSwitch
        If $zhuanhuanhou <> "" Then
                Return $zhuanhuanhou
        Else
                Return ""
        EndIf
EndFunc   ;==>_kuozhanming_xuliehao_huhuan
 
Func _TiQuKuoZhanMing($str)
        $Test = StringRegExp($str, '\.([^\.]*)$', 3)
        Return $Test[0]
EndFunc   ;==>_TiQuKuoZhanMing
Func _ExplorerDir($Dir, $Parameter = 0)
        Switch $Parameter
                Case 0
                        ShellExecuteWait("Explorer", "/n, " & $Dir)
                Case 1
                        ShellExecuteWait("Explorer", "/e, " & $Dir)
                Case 2
                        ShellExecuteWait("Explorer", "/root, " & $Dir)
                Case 3
                        ShellExecuteWait("Explorer", "/select, " & $Dir)
                Case Else
                        MsgBox(262160, "提示", "   参数错误!  ")
        EndSwitch
 
EndFunc   ;==>_ExplorerDir
发表于 2014-12-18 18:50:16 | 显示全部楼层
回复 1# gzh888666


   
#include <Array.au3>
#include <File.au3>
Local $aFiles[4] = ['au3.au3.rmvb', 'au3.au3.mp4', 'au3.au3.avi', 'au3.au3.wmv']
Local $aFiles_B = $aFiles
Local $sMsg1, $sMsg2

For $i = 0 To UBound($aFiles)-1
        $aFiles_B[$i] = _rename_file($aFiles[$i])
Next
$sMsg1 = _ArrayToString($aFiles, @TAB) & @CRLF & _ArrayToString($aFiles_B, @TAB)

For $i = 0 To UBound($aFiles_B)-1
        $aFiles[$i] = _rename_file($aFiles_B[$i])
Next
$sMsg2 = _ArrayToString($aFiles_B, @TAB) & @CRLF & _ArrayToString($aFiles, @TAB)
MsgBox(0, '', '"备份":' & @CRLF & $sMsg1 & @CRLF & @CRLF & '"恢复":' & @CRLF & $sMsg2)

Func _rename_file($sFile)
        Local $suffix, $Code, $sNewN
        If StringRegExp($sFile, '(?i)\.rar$') Then
                $suffix = _str_convert(StringLeft($sFile, 1))
                $sNewN =  StringRegExpReplace($sFile, '^(.+\.).+$', '\1') & $suffix
        Else
                $suffix = 'rar'
                $Code = _str_convert(_get_postfix($sFile))
                $sNewN = $Code & StringRegExpReplace(StringTrimLeft($sFile,1), '^(.+\.).+$', '\1') & $suffix
        EndIf
        Return $sNewN
EndFunc
Func _get_postfix($sFile)
   $aRe = StringRegExp($sFile, '\.([^\.]+)$', 3)
   If Not @error Then Return $aRe[0]
EndFunc
Func _str_convert($str);返回扩展名对应的序列号互换结果
        Local $sRe = ""
        Switch $str
                Case "rmvb"
                        $sRe = "1"
                Case "mp4"
                        $sRe = "2"
                Case "avi"
                        $sRe = "3"
                Case "wmv"
                        $sRe = "4"
                Case "1"
                        $sRe = "rmvb"
                Case "2"
                        $sRe = "mp4"
                Case "3"
                        $sRe = "avi"
                Case "4"
                        $sRe = "wmv"
                                Case Else
                                                Return SetError(1)
        EndSwitch
  Return $sRe
EndFunc
发表于 2014-12-18 18:52:47 | 显示全部楼层
老兄,对你的变量及函数取名方式实在不敢认同.
太长了,很不好记也不好认!!!
 楼主| 发表于 2014-12-19 10:08:30 | 显示全部楼层
回复 3# user3000

我也不怎么认同,无奈英语都还给老师了。现在做的工作也用不到,唉!年龄大了以后就没有上进心了。
感谢你的代码,学习.........
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-20 17:32 , Processed in 0.084835 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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