流沙枫 发表于 2012-3-20 10:56:46

文本有条件替换...... [已解决]

本帖最后由 流沙枫 于 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

求助大大们啊.....
就是如果用户名和密码相同,就禁用掉这个帐号!

nmgwddj 发表于 2012-3-20 11:00:14

。。。不知道你在自言自语什么呢。

shqf 发表于 2012-3-20 12:29:12

楼主看看下面的代码,你是不是这个意思啊(假设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")

xms77 发表于 2012-3-20 12:31:48

不明所以,就不能说明白点?

流沙枫 发表于 2012-3-20 13:35:15

回复 2# nmgwddj


    就是如果用户名和密码相同,就禁用掉这个帐号

流沙枫 发表于 2012-3-20 13:35:22

不明所以,就不能说明白点?
xms77 发表于 2012-3-20 12:31 http://www.autoitx.com/images/common/back.gif


    就是如果用户名和密码相同,就禁用掉这个帐号

流沙枫 发表于 2012-3-20 13:40:30

楼主看看下面的代码,你是不是这个意思啊(假设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

还有不是一行,是三行一组的......

流沙枫 发表于 2012-3-20 13:45:42

回复 3# shqf

{:face (117):}
拜谢啊.....

afan 发表于 2012-3-20 13:58:21

本帖最后由 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:01:55

本帖最后由 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)

zerry 发表于 2012-3-20 14:07:18

看得晕死了,楼主说得很不清楚啊~

流沙枫 发表于 2012-3-20 14:24:19

正则替换只需一行…
afan 发表于 2012-3-20 13:58 http://www.autoitx.com/images/common/back.gif


    太感谢了,再弱弱的问下,这个正则怎么用?放在autoit 里都编译出错的?

afan 发表于 2012-3-20 14:25:37

回复 12# 流沙枫


    10#的可以直接运行测试~

流沙枫 发表于 2012-3-20 14:35:20


afan 发表于 2012-3-20 14:01 http://www.autoitx.com/images/common/back.gif


    可以了,不过得结合上一个代码,才好读取文件修改了....
只能再自己努力研究下。

afan 发表于 2012-3-20 14:38:47

可以了,不过得结合上一个代码,才好读取文件修改了....
只能再自己努力研究下。
流沙枫 发表于 2012-3-20 14:35 http://www.autoitx.com/images/common/back.gif


    不会吧,这是方便测试的例子(不用另外创建个文本再读取),实际应用的话只需将 Local $Str = 你获取字符串的方式。
如 Local $Str = FileRead('test.txt')
页: [1] 2 3
查看完整版本: 文本有条件替换...... [已解决]