找回密码
 加入
搜索
查看: 8096|回复: 16

[AU3基础] XML中查找IP数值并进行替换[已解决]

 火.. [复制链接]
发表于 2011-9-22 12:37:58 | 显示全部楼层 |阅读模式
本帖最后由 allen 于 2011-11-3 09:46 编辑

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings>
        <category tag="0">
            <add key="a"           value="1.1.1.1" />
            <add key="ap"         value="10" />
            <add key="b"           value="2.2.2.2" />
            <add key="bp"     value="20" />
        </category>
    </appSettings>
</configuration>


代码如上
我现在想修改a,b的ip,修改后a的IP为3.3.3.3,b的ip修改后为4.4.4.4

俺的尝试:
1.想利用查找函数找到这个IP,然后进行替换
2.在坛子里搜到一个逐行读取查找的脚本,可我运行后这个XML文件出现乱码,原因为编码方式,但我不知道怎么样转为UTF-8格式,且那个脚本没有用fileopen,脚本如下:


#AutoIt3Wrapper_Run_Debug_Mode=y
#include <file.au3>

$countline=_FileCountLines(@ScriptDir & '\aa.xml')
$contentline=FileReadLine(@ScriptDir & '\aa.xml')

For $i=1 To $countline Step 1
        $content=FileReadLine(@ScriptDir & '\aa.xml',$i)
        If @error Then Exit
        If StringRegExp($content,'\<WriteSpeed\>0\</WriteSpeed\>',0)=0 Then ContinueLoop;;;;如果该行不匹配 <WriteSpeed>0</WriteSpeed> 就继续读取、检查下一行   
        _FileWriteToLine(@ScriptDir & '\aa.xml',$i,'<WriteSpeed>xyz</WriteSpeed>',1);;;用新行覆盖旧行
Next






现在请各位高手帮分析下:
尝试1是否可以实现
尝试2怎么让它替换后不是乱码


PS:我觉的1应该比较好实现,不过因为是菜鸟,所以请教各位,谢谢。
发表于 2011-9-23 01:20:27 | 显示全部楼层
搜索“XML”得到很多答案的说。。。。。。。。
发表于 2011-9-23 10:24:30 | 显示全部楼层
stringregexpreplace($str,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","替换")
发表于 2011-9-23 13:27:12 | 显示全部楼层
回复 3# drunk
这个替换的话,就把a和b都一起替换了
发表于 2011-9-23 13:28:15 | 显示全部楼层
回复 4# xms77
行替换是可以的
发表于 2011-9-23 16:18:31 | 显示全部楼层
楼主我提供一个自用的小工具代码给你看看是否适用。
功能:

自动修改Servers.txt中变更的ip地址

使用方式:
必须配合Servers.txt和ipupdate.txt使用,和Servers.txt、ipupdate.txt放在同一目录下运行。
ipupdate.txt文件格式旧ip在前,新ip在后,使用","分割。运行后同目录下会生成Serversnew.txt
和ipupdate.log文件,可以查看log看是否修改成功。
#Include <File.au3>
Local $currentline1
Local $string1
Local $string2
Local $filename1 = @ScriptDir&"\ipupdate.txt"
Local $filename2 = @ScriptDir&"\Servers.txt"
Local $linecount1
Local $i

$linecount1 = _FileCountLines($filename1)
Local $chars = FileRead($filename2)
For $i=1 to $linecount1 Step +1
        $currentline1 = FileReadLine($filename1,$i) 
        Local $array = StringSplit($currentline1, ",",1)
        $string1 = $array[1]
        $string2 = $array[2]
        FileOpen(@ScriptDir&"\serversnew.txt",10)
        Local $charsreplaced = StringReplace ($chars, $string1, $string2) 
        Local $numreplacements = @extended
        FileOpen(@ScriptDir&"\ipupdate.log",9)
        FileWriteLine(@ScriptDir&"\ipupdate.log",$string1&"修改完成,共修改"&$numreplacements&"处。")
        FileClose(@ScriptDir&"\ipupdate.log")
        FileWrite(@ScriptDir&"\Serversnew.txt",$charsreplaced)
        FileClose(@ScriptDir&"\Serversnew.txt")
        Local $chars = FileRead(@ScriptDir&"\Serversnew.txt")
Next 
        Exit 
发表于 2011-9-23 16:24:07 | 显示全部楼层
你把你要修改的文件改名为servers.txt,要修改的ip按格式放到ipupdate.txt中,旧ip在前,新ip在后,使用","分割。如果有多个需要修改的ip,请分多行写入。
发表于 2011-9-26 08:25:55 | 显示全部楼层
回复 5# xms77


    '(a[^=]+)="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"',''$1=192.168.1.1"
发表于 2011-9-26 08:50:19 | 显示全部楼层
回复 8# drunk
谢谢,学习了!
发表于 2011-9-26 12:59:53 | 显示全部楼层
学习一下XML的操作
 楼主| 发表于 2011-9-26 13:12:58 | 显示全部楼层
我正则的知识很菜鸟的说,,这两天断网没验证。稍后验证下。
 楼主| 发表于 2011-9-26 13:25:04 | 显示全部楼层
回复 8# drunk


    可否给出完整代码?
发表于 2011-9-26 15:26:58 | 显示全部楼层
多多向各位学习
发表于 2011-9-26 15:28:06 | 显示全部楼层
怎么老是提示金钱不足,扣了我的钱,不给下东西
发表于 2011-9-26 16:03:19 | 显示全部楼层
回复 12# allen

$file = FileRead("test.xml")
MsgBox(0,0,StringRegExpReplace($file,'("a"[^=]+)="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"','$1="192.168.1.1"'))
MsgBox(0,0,StringRegExpReplace($file,'("b"[^=]+)="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"','$1="255.255.255.255"'))
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-23 00:59 , Processed in 0.080930 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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