找回密码
 加入
搜索
查看: 3883|回复: 12

[系统综合] 如何替换一个文本中每行字符的前三个?

 火.. [复制链接]
发表于 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
----------------------------------------
我只是想把他们的盘符改成当前盘符。
发表于 2011-1-14 13:48:20 | 显示全部楼层
可以用filereadline stringmid 和stringregexpreplace搭配使用。用手机发的,抱歉
 楼主| 发表于 2011-1-14 14:02:42 | 显示全部楼层
回复 2# papapa314

来个例子好吗?我用什么命令把字符写入这个文本?
发表于 2011-1-14 14:06:21 | 显示全部楼层
办公室呢,等晚上。没人出注意的话我试试
发表于 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组合那么就是我们要的字符串了,之后逐行写入文档 转换就完毕了,
代码我就不写了,自己在帮助里看看有什么函数好用的吧
发表于 2011-1-14 14:31:40 | 显示全部楼层
待会儿哈,用手机实在不方便,请见谅
发表于 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)
发表于 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)
发表于 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)
发表于 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)
发表于 2011-1-14 15:24:55 | 显示全部楼层
不过我自己测了一下,发现最后一行替换不了,很奇怪,还望高手指出问题所在

软件提示问题出在$line[$i]=FileReadLine($file1,$i+1)这一行上
发表于 2011-1-14 17:57:35 | 显示全部楼层
StringRegExpReplace($s,'^\w:\\',StringLeft(@ScriptDir,1)&":\")
发表于 2011-1-14 19:13:51 | 显示全部楼层
你直接用记事本替换得了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 10:11 , Processed in 0.083467 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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