请教:寻找条件字串并修改下一行(已解决)
本帖最后由 CCM 于 2018-1-4 15:36 编辑我有一个档案,内容大致如下:
<setting name="Export">
<value>0</value>
</setting>
<setting name="updateSwitch">
<value>1</value>
</setting>
<setting name="ELEC_DOC_SETTING">
<value>3</value>
</setting>
<setting name="FILE_PATH">
<value>1</value>
</setting>
我想针对红色字这个功能,将数字由1变0,怎么处理会比较快?
这行字的位置不固定,我想过用逐行读取,但就算我找到updateSwitch该怎么去修改他的下一行,这个指令该怎么下? 本帖最后由 hnfeng 于 2018-1-3 14:45 编辑
Local $sSource = _
'<setting name="Export">' & @CRLF & _
' <value>0</value>' & @CRLF & _
'</setting>' & @CRLF & _
'<setting name="updateSwitch">' & @CRLF & _
' <value>1</value>' & @CRLF & _
'</setting>' & @CRLF & _
'<setting name="ELEC_DOC_SETTING">' & @CRLF & _
' <value>3</value>' & @CRLF & _
'</setting>' & @CRLF & _
'<setting name="FILE_PATH">' & @CRLF & _
' <value>1</value>' & @CRLF & _
'</setting>'
Local $sSRERe = StringRegExpReplace($sSource, '(?sm)(<setting name="updateSwitch">.+?<value>)(.+?)(<)', '${1}0${3}')
MsgBox(0, 0, $sSRERe) $sStr = ClipGet()
$sStr = StringRegExpReplace($sStr,'(?is)(updateSwitch">.+?>)(.*?)(<)','${1}0${3}')
MsgBox(0,0,$sStr) 本帖最后由 CCM 于 2018-1-4 15:38 编辑
不好意思,之前叙述不清楚。
目前有一个config.xml档,里面大概数百行,就是一些功能1或0这样,结构都如下面这样表示:
<setting name="Export">
<value>0</value>
</setting>
<setting name="updateSwitch">
<value>1</value>
</setting>
<setting name="ELEC_DOC_SETTING">
<value>3</value>
</setting>
<setting name="FILE_PATH">
<value>1</value>
</setting>
我想在这几百行里面找到红字部分updateSwitch,将value值由1改成0,但麻烦的是这三行字的位置在config.xml内并不固定,不然就可以指定行数来覆盖,且由于不同电脑内的值大不相同,所以也不能直接覆盖这个档案。
我用FileWrite(@DesktopDir & "\A.txt", $sSRERe)结果只写入$sSource的内容,前后都被清空,这两天在论坛寻找了几个类似的范例,不过能力有限,实在改不出来,只好请大神们再帮帮忙。
麻烦大家了。
后来用 找 替换 这两个关键字找到一篇文章,按文章修改已经可以了。
附上代码,以利后人查询使用。
谢谢大家。#include <file.au3>
$countline = _FileCountLines(@ScriptDir & '\A.txt')
$contentline = FileReadLine(@ScriptDir & '\A.txt')
For $i = 1 To $countline Step 1
$content = FileReadLine(@ScriptDir & '\A.txt', $i)
If @error Then Exit
If StringRegExp($content, '<setting name="updateSwitch">', 0) = 0 Then ContinueLoop;;;;如果该行不匹配就继续读取、检查下一行
_FileWriteToLine(@ScriptDir & '\A.txt', $i + 1, ' <value>0</value>', 1);因为要改的是目标下一行,所以$i+1并用新行覆盖旧行
Next 本帖最后由 hnfeng 于 2018-1-4 15:40 编辑
回复 4# CCM
你这个的运行效率可能不高啊。前面两个帖子都能帮你搞掂,你却用了个最笨的办法
页:
[1]