steven_deng 发表于 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
是否用字符正式规则来解决? 还是用循环解决,还没有找到好方法。
十分感谢

afan 发表于 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))

xms77 发表于 2012-8-1 20:49:14

回复 2# afan
高人啊,我还在想用stringsplit来分隔后处理呢,原来可以这么简单。

whitehead 发表于 2012-8-2 00:04:55

对字符串的操作有了更多的认识。谢谢

xlj310 发表于 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来解决吧~

afan 发表于 2012-8-2 01:16:56

回复afan


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


    所以我说“这种规则的字符串用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)

steven_deng 发表于 2012-8-2 09:27:34

感谢各位 问题解决 要是能解释下正式表达式就更好了 呵呵

ajian55 发表于 2012-8-27 00:10:00

感谢楼主,非常好的东西
页: [1]
查看完整版本: 已解决 谢谢各位 字符串提前处理