如何替换一个文本中每行字符的前三个?
本帖最后由 ac5474012 于 2011-1-14 14:03 编辑如何替换一个文本中每行字符的前三个?
文本中的内容就像这样
--------------------------------------
M:\MINIPE\SYSTEM
M:\MINIPE\DEEPIN.XPM.GZ
M:\MINIPE\MUIFONT.GZ
M:\MINIPE\DOSTOOL.IMG
M:\MINIPE\PM805.IMG
----------------------------------------
我只是想把他们的盘符改成当前盘符。 可以用filereadline stringmid 和stringregexpreplace搭配使用。用手机发的,抱歉 回复 2# papapa314
来个例子好吗?我用什么命令把字符写入这个文本? 办公室呢,等晚上。没人出注意的话我试试 思路是这样
例如
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
Wend
这样每次一行的字符就保存在$line中了
然后我们用字符管理函数StringMid
于是乎
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$i=StringMid($line,4)
;这里的意思是返回$line 字串中从第四位开始之后的所有的字符
Wend
下面我做一个简单的组合,我们只要将要替换的前三位设定为$w,然跟被砍头的$line 也就是$i组合那么就是我们要的字符串了,之后逐行写入文档 转换就完毕了,
代码我就不写了,自己在帮助里看看有什么函数好用的吧 待会儿哈,用手机实在不方便,请见谅 Local $Str = _
'M:\MINIPE\SYSTEM' & @CRLF & _
'M:\MINIPE\DEEPIN.XPM.GZ' & @CRLF & _
'M:\MINIPE\MUIFONT.GZ' & @CRLF & _
'M:\MINIPE\DOSTOOL.IMG' & @CRLF & _
'M:\MINIPE\PM805.IMG' & @CRLF
MsgBox(0, '原字符串', $Str)
Local $P = @ScriptDir & '\'
Local $StrEscape = '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)'
Local $Test = StringRegExpReplace($str, '(?<=\n|^)...', StringRegExpReplace($P, $StrEscape, '\\$1'))
MsgBox(0, '替换结果', $Test) 本帖最后由 manlty 于 2011-1-14 15:34 编辑
正则替换,一句代码就搞定
比如你的文本文件是桌面1.txt
$nstr=StringRegExpReplace(FileRead(@DesktopDir&"\1.txt"),'.:\\',stringreplace(@ScriptDir,'\','\\')&'\\')
$opfile=FileOpen(@DesktopDir&"\1.txt",2)
FileWrite($opfile,$nstr) 简单的替换,不是正则$Str = 'M:\MINIPE\SYSTEM' & @CRLF & _
'M:\MINIPE\DEEPIN.XPM.GZ' & @CRLF & _
'M:\MINIPE\MUIFONT.GZ' & @CRLF & _
'M:\MINIPE\DOSTOOL.IMG' & @CRLF & _
'M:\MINIPE\PM805.IMG' & @CRLF
$text = StringReplace($Str, "M:", @ScriptDir)
MsgBox(0, '替换结果', $text) 本帖最后由 papapa314 于 2011-1-14 15:25 编辑
抱歉,我也是新手,不过有我能帮的我会尽量帮的,还没学正则,用土办法试试:
#include <file.au3>
$file1=FileOpenDialog("浏览","","(*.txt)")
$file2=_TempFile(@ScriptDir,"new",".txt",1)
$count=_FileCountLines($file1)
Dim $line[$count-1]
Dim $var0[$count-1]
Dim $var1[$count-1]
For $i=0 To $count-1
$line[$i]=FileReadLine($file1,$i+1)
$var0[$i]=StringMid($line[$i],1,3)
$var1[$i]=StringRegExpReplace($line[$i],$var0[$i],"要替换的字符")
FileWriteLine($file2,$var1[$i])
Next
FileClose($file1)
FileClose($file2) 不过我自己测了一下,发现最后一行替换不了,很奇怪,还望高手指出问题所在
软件提示问题出在$line[$i]=FileReadLine($file1,$i+1)这一行上 StringRegExpReplace($s,'^\w:\\',StringLeft(@ScriptDir,1)&":\") 你直接用记事本替换得了
页:
[1]