文本有条件替换...... [已解决]
本帖最后由 流沙枫 于 2012-3-20 15:27 编辑add caller-id="" comment="\C5\A9\BD\F0\C3\F4" disabled=no limit-bytes-in=0 \
limit-bytes-out=0 name=201109password=201109 profile=default \
routes="" service=pppoe
add caller-id="" comment="\D6\A3\BE\DE\C9\CD" disabled=no limit-bytes-in=0 \
limit-bytes-out=0 name=201112 password=201103 profile=default \
routes="" service=pppoe
按下面的条件替换文本.....
name=i password=j
if i=j
then disabled=no 改为 disabled=yes
求助大大们啊.....
就是如果用户名和密码相同,就禁用掉这个帐号! 。。。不知道你在自言自语什么呢。 楼主看看下面的代码,你是不是这个意思啊(假设ADD为头的每一句话内容在一行上,文件为1.txt)
FileCopy(@ScriptDir & "\1.txt", @TempDir & "\1.txt",1)
$File = FileOpen(@TempDir & "\1.txt", 0)
$nFile = FileOpen(@ScriptDir & "\1.txt", 2)
While 1
$Var = FileReadLine($File)
If @error = -1 Then ExitLoop
$name = StringRegExp($Var, "name=(\d{6}) ", 3)
$password = StringRegExp($Var, "password=(\d{6}) ", 3)
If $name = $password Then
$Var = StringReplace($Var, "disabled=no", "disabled=yes")
EndIf
FileWriteLine($nFile, $Var)
WEnd
FileClose($File)
FileClose($nFile)
ShellExecute("1.txt") 不明所以,就不能说明白点? 回复 2# nmgwddj
就是如果用户名和密码相同,就禁用掉这个帐号 不明所以,就不能说明白点?
xms77 发表于 2012-3-20 12:31 http://www.autoitx.com/images/common/back.gif
就是如果用户名和密码相同,就禁用掉这个帐号 楼主看看下面的代码,你是不是这个意思啊(假设ADD为头的每一句话内容在一行上,文件为1.txt)
shqf 发表于 2012-3-20 12:29 http://www.autoitx.com/images/common/back.gif
就是这个意思,大大给力啊....
可惜运行还有错误
Subscript used with non-Array variable.:
If $name = $password Then
If $name^ ERROR
还有不是一行,是三行一组的...... 回复 3# shqf
{:face (117):}
拜谢啊..... 本帖最后由 afan 于 2012-3-20 14:58 编辑
正则替换只需一行…$sReplace = StringRegExpReplace($str, '(?i)disabled=no(.+\s+.+name=\h*(\H.+?)\h*password=\h*\2)', 'disabled=yes$1') 本帖最后由 afan 于 2012-3-20 14:58 编辑
Local $Str = _
'add caller-id="" comment="\C5\A9\BD\F0\C3\F4" disabled=no limit-bytes-in=0 \' & @CRLF & _
' limit-bytes-out=0 name=201109password= 201109profile=default \' & @CRLF & _
' routes="" service=pppoe' & @CRLF & _
'add caller-id="" comment="\D6\A3\BE\DE\C9\CD" disabled=no limit-bytes-in=0 \' & @CRLF & _
' limit-bytes-out=0 name=201112 password=201103 profile=default \' & @CRLF & _
' routes="" service=pppoe' & @CRLF & @CRLF
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExpReplace($str, '(?i)disabled=no(.+\s+.+name=\h*(\H.+?)\h*password=\h*\2)', 'disabled=yes$1')
MsgBox(0, '替换结果', $Test) 看得晕死了,楼主说得很不清楚啊~ 正则替换只需一行…
afan 发表于 2012-3-20 13:58 http://www.autoitx.com/images/common/back.gif
太感谢了,再弱弱的问下,这个正则怎么用?放在autoit 里都编译出错的? 回复 12# 流沙枫
10#的可以直接运行测试~
afan 发表于 2012-3-20 14:01 http://www.autoitx.com/images/common/back.gif
可以了,不过得结合上一个代码,才好读取文件修改了....
只能再自己努力研究下。 可以了,不过得结合上一个代码,才好读取文件修改了....
只能再自己努力研究下。
流沙枫 发表于 2012-3-20 14:35 http://www.autoitx.com/images/common/back.gif
不会吧,这是方便测试的例子(不用另外创建个文本再读取),实际应用的话只需将 Local $Str = 你获取字符串的方式。
如 Local $Str = FileRead('test.txt')