找回密码
 加入
搜索
查看: 3758|回复: 7

[AU3基础] 已解决 谢谢各位 字符串提前处理

  [复制链接]
发表于 2012-8-1 17:35:12 | 显示全部楼层 |阅读模式
本帖最后由 steven_deng 于 2012-8-2 09:26 编辑

有个环境变量path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows7Master;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;C:\usr\local\bin;%CDSROOT%\tools\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\pcb\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;%CDSROOT%\OpenAccess\bin\win32\opt
如何将带有%cdsroot%的变量放到最前面 即最终结果是:
path=%CDSROOT%\tools\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\pcb\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;%CDSROOT%\OpenAccess\bin\win32\opt;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows7Master;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;C:\usr\local\bin
是否用字符正式规则来解决? 还是用循环解决,还没有找到好方法。
十分感谢
发表于 2012-8-1 18:45:26 | 显示全部楼层
这种规则的字符串用StringMid 来取就行了
Local $Str = 'path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows7Master;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;C:\usr\local\bin;%CDSROOT%\tools\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\pcb\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;%CDSROOT%\OpenAccess\bin\win32\opt'
Local $p = StringInStr($Str, '%cdsroot%')
MsgBox(0, '', 'path=' & StringMid($Str, $p) & ';' & StringMid($Str, 6, $p -1 - 6))

评分

参与人数 1金钱 +10 收起 理由
xms77 + 10 高明

查看全部评分

发表于 2012-8-1 20:49:14 | 显示全部楼层
回复 2# afan
高人啊,我还在想用stringsplit来分隔后处理呢,原来可以这么简单。
发表于 2012-8-2 00:04:55 | 显示全部楼层
对字符串的操作有了更多的认识。谢谢
发表于 2012-8-2 00:36:03 | 显示全部楼层
回复 2# afan


    afan的确很高明,小弟有一疑问,不知道afan有没有考虑过:
在本提问中,以%cdsroot%开头的语句都集中在一起(此例是都在文本的最后面),用你方法固然可行,倘若有那么一两个不符合的夹杂在前面据说的这些中间,那你的方法就会得到错误的答案。如:Local $Str = 'path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;%CDSROOT%\tools\bin;C:\usr\local\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\pcb\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;C:\Program Files\Windows7Master;%CDSROOT%\OpenAccess\bin\win32\opt'
这是我手动变更的,按道理来说,环境变量的排列次序是按添加的先后顺序来排序的,所以完全有可能是打乱次序的,所以这个可能还是不能简单的用StringInStr和StringMid来解决吧~
发表于 2012-8-2 01:16:56 | 显示全部楼层
回复  afan


    afan的确很高明,小弟有一疑问,不知道afan有没有考虑过:
在本提问中,以%cdsroot% ...
xlj310 发表于 2012-8-2 00:36



    所以我说“这种规则的字符串用StringMid 来取就行了”
如果不是这种规则当然另当别论,如上面的打乱下。
Local $Str = 'path=C:\Windows\system32;%CDSROOT%\tools\pcb\bin;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\bin;%CDSROOT%\tools\bin;C:\usr\local\bin;%CDSROOT%\tools\libutil\bin;%CDSROOT%\tools\fet\bin;%CDSROOT%\tools\specctra\bin;%CDSROOT%\tools\PSpice;%CDSROOT%\tools\PSpice\Library;%CDSROOT%\tools\Capture;C:\Program Files\Windows7Master;%CDSROOT%\OpenAccess\bin\win32\opt;C:\Program Files\SinoVoice\jTTS 5.0 Desktop\Bin'
Local $sRER1 = StringRegExpReplace(StringRegExpReplace($str, '(?i)(?<=\=|;)(?:(?!%CDSROOT%)[^;])+;?', ''), ';?\s*$', '') & ';'
Local $sRER2 = StringRegExpReplace(StringRegExpReplace($str, '^.+?\=|(?i)%CDSROOT%[^;]+;?', ''), ';?\s*$', '')
MsgBox(0, '', '原字符串' & @CRLF & $Str & @CRLF & @CRLF & '替换结果' & @CRLF & $sRER1 & '■分界明示■' & $sRER2)
 楼主| 发表于 2012-8-2 09:27:34 | 显示全部楼层
感谢各位 问题解决 要是能解释下正式表达式就更好了 呵呵
发表于 2012-8-27 00:10:00 | 显示全部楼层
感谢楼主,非常好的东西
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-30 01:26 , Processed in 0.103116 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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