删除特殊的文件行该如何处理?[已解决]
本帖最后由 chishingchan 于 2013-2-23 22:14 编辑以下是某软件的一个XML文件:<?xml version="1.0" encoding="utf-8"?>
<Window>
<Font name="微软雅黑" size="12" bold="false" default="true" />
<Font name="微软雅黑" size="12" bold="true"/>
<Default name="Menu" value="inset="1,0,1,0" itemtextpadding="20,0,0,0" bkimage="file='menu_bk.png'" itemselectedimage="file='uiitem.png' source='0,59,126,89'" itemselectedtextcolor="0xFFFFFFFF"" />
<Default name="MenuElement" value="padding="0,0,0,0"" />
<Default name="Normal_helpIcon" value="bkimage="file='uiitem.png' source='44,15,50,21' dest='94,10,100,16'"" />
<Default name="Selected_helpIcon" value="bkimage="file='uiitem.png' source='38,15,44,21' dest='94,10,100,16'"" />
<Menu>
<MenuElement name="menu_launch" text="开机自动运行">
<HorizontalLayout>
<Option name ="launch_status"selectedimage="file='uiitem.png' source='0,15,14,25' dest='1,6,15,16'" />
</HorizontalLayout>
</MenuElement>
<MenuElement name="menu_mini2tip" text="最小化到托盘" />
<MenuElement name="menu_setting" text="设置...">
<Label width="20" bkimage="file='uiitem.png' source='14,15,28,29' dest='0,6,14,20'" />
</MenuElement>
<MenuElement name="menu_shutdown" text="定时关机..." />
<MenuElement name="menu_help_element" text="帮助">
<Label name="menu_help_icon" width="6" bkimage="file='uiitem.png' source='44,15,50,21' dest='94,10,100,16'"/>
<MenuElement name="menu_help" padding="0,0,0,0" text="帮助"/>
<MenuElement name="menu_official" padding="0,0,0,0" text="官方网站" />
<MenuElement name="menu_homepage" padding="0,0,0,0" text="首页" />
<MenuElement name="menu_feedback" padding="0,0,0,0" text="提交反馈" />
<MenuElement name="menu_about" padding="0,0,0,0" text="关于" />
</MenuElement>
<MenuElement name="menu_exit" text="退出" >
<Label width="20" bkimage="file='uiitem.png' source='28,15,38,26' dest='1,6,11,17'" />
</MenuElement>
</Menu>
</Window>需要做如何操作:
删除行:10、11、12、13、14;22、23、24、25、26
修改行:20 "帮助" 改为 "关于"
借用了 Afan超版 制作的两个函数
_FileSRER2Line
_StringREReplace_Order$File = "menu.xml"
_FileSRER2Line($File,'menu_launch','',0)
_FileSRER2Line($File,'HorizontalLayout','',0)
_FileSRER2Line($File,'launch_status','',0)
_FileSRER2Line($File,‘</MenuElement>','',0)
因为“</MenuElement>”有多个,_FileSRER2Line 解决不了了!经 Afan 指点使用 _StringREReplace_Order,但好像用在这不合适?!
语法: _StringREReplace_Order('字符串', '搜索字符'[, '替换'[, 出现次序[, 区分大小写[, 正则标志]]]])
请问高手们该如何解决此问题?! 本帖最后由 happytc 于 2013-2-21 16:43 编辑
回复 1# chishingchan
#include <array.au3>
#include <File.au3>
Local $aArray, $aLine =
_FileReadToArray('a.txt', $aArray)
$aArray = StringRegExpReplace($aArray, '帮助', '关于')
For $i = 0 To UBound($aLine) - 1
_ArrayDelete($aArray, $aLine[$i] - $i)
Next
_ArrayDelete($aArray, 0)
_FileWriteFromArray('a.txt', $aArray, @CRLF)
回复 2# happytc
谢谢!不过好像运行出错了。我正在检查。。。 这个脚本用在《软件安装器》里面的,如果不需要#include语句就最好了! 本帖最后由 afan 于 2013-2-21 18:27 编辑
#Include <Array.au3>
_FileDelLine('test.txt', '10、11、12、13、14;22、23、24、25、26', 'test111.txt')
Func _FileDelLine($File, $sLine, $FileNew = '', $CR = 1)
;afan说明: 本函数可按指定的行号删除行,可指定多个行号:非数字字符间隔即可。
;语法:_FileDelLine('文件路径', '行号'[, '新文件名'[, 回车符标志]])
;参数:可选参数:如'新文件名'字符为空则写入原文件(默认);不为空则写入指定的文件。
; 可选参数:回车符标志 = 1 仅识别有回车符的断行@CRLF(默认),非1只要有换行符@LF即识别为断行
;另注:使用本函数需 #Include <Array.au3>(仅为了规避重复行号及行号乱序,如无需求可注释掉)
Local $aLine = StringRegExp($sLine, '\d+', 3)
If @Error Then Return SetError(1)
$aLine = _ArrayUnique($aLine) ;---- 规避重复行号
_ArraySort($aLine, 1, 1) ;---- 规避行号乱序
Local $str = String(FileRead($File)), $i, $CRF = ''
If $CR <> 1 Then $CRF = '?'
For $i = 1 To UBound($aLine) - 1
$str = StringRegExpReplace($str, '(^(?:.*?\r' & $CRF & '\n){' & Number($aLine[$i]) - 1 & '})\V*\r' & $CRF & '\n?', '$1')
Next
Local $_File = $File, $FO
If $FileNew <> '' Then $_File = $FileNew
$FO = FileOpen($_File, 2 + 8)
FileWrite($FO, $str)
FileClose($FO)
EndFunc ;==>_FileDelLine
这个脚本用在《软件安装器》里面的,如果不需要#include语句就最好了!
chishingchan 发表于 2013-2-21 18:13 http://www.autoitx.com/images/common/back.gif
搞不明白什么意思? 为什么用在这里面,就“#include语句”不好了?
谢谢!不过好像运行出错了。我正在检查。。。
你把上面你给的文本存为a.txt文件(注意看看用记事本打开是32行),放在脚本所在目录,若出错,给出错误信息。 回复 6# happytc
因为脚本不需要编译,与 AutoIt3.exe 单文件同目录,直接命令行调用,如果包含文件,此目录就会多了包含的文件。 回复 6# happytc
因为脚本不需要编译,与 AutoIt3.exe 单文件同目录,直接命令行调用,如果包含文件,此目录就会多了包含的文件。
第7行的-号出错 回复happytc
因为脚本不需要编译,与 AutoIt3.exe 单文件同目录,直接命令行调用,如果包含文件 ...
chishingchan 发表于 2013-2-21 21:37 http://www.autoitx.com/images/common/back.gif
那个肯定是错了,将“-”改成“-” 回复 8# chishingchan
直接写的,没想到输入法问题,把减号输入成全角的。哈………………
那是个减号:-
“ 因为脚本不需要编译,与 AutoIt3.exe 单文件同目录,直接命令行调用,如果包含文件,此目录就会多了包含的文件。”
这个嘛,最简单就是利用‘迷惑',可以把所有的Include文件和你的脚本一起放在一个文件里。当然,你手工把那象_ArrayDelete等函数的定义直接拷到你的脚本文件里也可以,那几个函数定义都是独立的。 其实这个错误,不是一眼就可以看出来嘛。 其实这个错误,不是一眼就可以看出来嘛。
happytc 发表于 2013-2-21 22:36 http://www.autoitx.com/images/common/back.gif
这个是,还有一个错误是我改文件名字时改少一个错误的。
页:
[1]