ac5474012 发表于 2011-1-14 13:36:04

如何替换一个文本中每行字符的前三个?

本帖最后由 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
----------------------------------------
我只是想把他们的盘符改成当前盘符。

papapa314 发表于 2011-1-14 13:48:20

可以用filereadline stringmid 和stringregexpreplace搭配使用。用手机发的,抱歉

ac5474012 发表于 2011-1-14 14:02:42

回复 2# papapa314

来个例子好吗?我用什么命令把字符写入这个文本?

nmgwddj 发表于 2011-1-14 14:06:21

办公室呢,等晚上。没人出注意的话我试试

kloper 发表于 2011-1-14 14:25:26

思路是这样
例如
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组合那么就是我们要的字符串了,之后逐行写入文档 转换就完毕了,
代码我就不写了,自己在帮助里看看有什么函数好用的吧

papapa314 发表于 2011-1-14 14:31:40

待会儿哈,用手机实在不方便,请见谅

afan 发表于 2011-1-14 15:02:13

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:04:01

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

lixiaolong 发表于 2011-1-14 15:18:16

简单的替换,不是正则$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:23:47

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

papapa314 发表于 2011-1-14 15:24:55

不过我自己测了一下,发现最后一行替换不了,很奇怪,还望高手指出问题所在

软件提示问题出在$line[$i]=FileReadLine($file1,$i+1)这一行上

大绯狼 发表于 2011-1-14 17:57:35

StringRegExpReplace($s,'^\w:\\',StringLeft(@ScriptDir,1)&":\")

www378660084 发表于 2011-1-14 19:13:51

你直接用记事本替换得了
页: [1]
查看完整版本: 如何替换一个文本中每行字符的前三个?