找回密码
 加入
搜索
查看: 1361|回复: 6

關於尋找文件中的目標行及取代指令

[复制链接]
发表于 2009-4-26 17:39:29 | 显示全部楼层 |阅读模式
本帖最后由 wongfung 于 2009-4-28 22:07 编辑

1.請問如何尋找文件中的目標行?

例如該文件為

1
1
1
1
123456789
1
1
1

我想找123456789這行, 並提取89兩個數字, 然後輸出089
問問下面的代碼有甚麼地方有問題???
如何定義在某檔案中尋找呢???
$line = '1234567'
        $id = "000" & Number(StringLeft($line, 7))
        $id = StringRight($id, 3)


2.想問問兩個取代指令StringReplace及_ReplaceStringInFile的分別在那裏呢?
在使用StringReplace前如何定義目標檔案???
发表于 2009-4-26 18:07:30 | 显示全部楼层
1.用_FileReadToArray将文件读入数组,然后循环处理每一行,找到你想要的,进行处理并输出。
2.StringReplace的功能是在字符串中查找指定字符(串),将其替换为另一字符(串)。_ReplaceStringInFile则是在文件中查找并替换。
 楼主| 发表于 2009-4-26 19:00:37 | 显示全部楼层
2# sensel


原文件是這樣:
id=1
n123
id=2
n123
id=3
n123
...
id=999
n123

我想變成這樣:
id=1
001123
id=2
002123
id=3
003123
...
id=999
999123

但我這樣寫不行:
#include <File.au3>
$file = FileOpenDialog("Open", @WorkingDir, "All Files(*.*)" , 1 )
FileCopy($file, $file & "_origin", 1)

$line = 'id='

$id = "000" & Number(StringMid($line, 4))
$id = StringRight($id, 3)
        _ReplaceStringInFile($file, "n", $id , 0, 0)


1.請問那個地方出問題呢?
2.怎樣使用循環呢???(由1-999)
不知道用while wend        還是do until好...囧
发表于 2009-4-26 21:20:21 | 显示全部楼层
需求是把每行中的所有n替换成三位数的上个id值?那么不能用_ReplaceStringInFile,因为你无法确定每个n要替换的值。

#Include <File.au3>

$file = FileOpenDialog("Open", @WorkingDir, "All Files(*.*)" , 1 )
FileCopy($file, $file & "_origin", 1)

$line = 'id='

Local $aFileLine, $sID = ""

_FileReadToArray($file & "_origin", $aFileLine)   ; 将文件内容读入数组 $aFileLine
For $i = 1 To $aFileLine[0]   ; $aFileLine[0] 是文件总行数
        If StringLeft($aFileLine[$i], 3) = $line Then   ; 如果行的前三位等于关键字,进行处理
                $sID = StringTrimLeft($aFileLine[$i], 3)
                $sID = StringRight("000" & $sID, 3)
                ContinueLoop
        EndIf
        StringReplace($aFileLine[$i], "n", $sID)   ; 将无关键字的行中n替换成获取的id值
Next
_FileWriteFromArray($file & "_origin", $aFileLine, 1)   ; 将数组内容写回文件
 楼主| 发表于 2009-4-26 23:45:49 | 显示全部楼层
需求是把每行中的所有n替换成三位数的上个id值?那么不能用_ReplaceStringInFile,因为你无法确定每个n要替换的值。

#Include

$file = FileOpenDialog("Open", @WorkingDir, "All Files(*.*)" , 1 )
FileCop ...
sensel 发表于 2009-4-26 21:20


嗯, 很感謝, 不過試了還是不行

另外我改了一些東西

我想將

id=1
n
n
n
id=2
n
n
n
...
id=999
n
n
n

轉成

id=1
0011
0012
0013
id=2
0021
0022
0023
...

以下的代碼無效...

#Include <File.au3>

$file = FileOpenDialog("Open", @WorkingDir, "All Files(*.*)" , 1 )
FileCopy($file, $file & "_origin", 1)

$line = "id="

Local $aFileLine, $sID = ""

_FileReadToArray($file & "_origin", $aFileLine)   ; 将文件内容读入数组 $aFileLine
For $i = 1 To $aFileLine[0]   ; $aFileLine[0] 是文件总行数
        If StringLeft($aFileLine[$i], 3) = $line Then   ; 如果行的前三位等于关键字,进行处理
                $sID = StringTrimLeft($aFileLine[$i], 3)
                $sID = StringRight("000" & $sID, 3)
                ContinueLoop
        EndIf
        StringReplace($aFileLine[$i], "n", $sID & "1",0 )   ; 将无关键字的行中n替换成获取的id值
                StringReplace($aFileLine[$i], "n", $sID & "2",0 )   ; 将无关键字的行中n替换成获取的id值
                StringReplace($aFileLine[$i], "n", $sID & "3",0 )   ; 将无关键字的行中n替换成获取的id值
Next
_FileWriteFromArray($file & "_origin", $aFileLine, 1)   ; 将数组内容写回文件

求解決方法...T-T
发表于 2009-4-27 00:57:53 | 显示全部楼层
id=65
0651
0652
0653
0654
...

是不是需要改成这样?每行原来的内容不要了?
还有,你要改的是哪个文件?突然发现你用的文件名是$file & "_origin",那么这个是备份文件,真正要改的是$file这个文件了?
 楼主| 发表于 2009-4-27 16:54:12 | 显示全部楼层
本帖最后由 wongfung 于 2009-4-28 10:53 编辑
id=65
0651
0652
0653
0654
...

是不是需要改成这样?每行原来的内容不要了?
还有,你要改的是哪个文件?突然发现你用的文件名是$file & "_origin",那么这个是备份文件,真正要改的是$file这个文件了?
sensel 发表于 2009-4-27 00:57


嗯, 將原内容改成前面三個位, 再由id下面一行開始, 每行取代後都加一些不同東西, 直至另一id上的一行完, 現在假設是改3行
(id的範圍由0-999)

其結構為
id=x
---->由這裏   [三個位的id][不同東西1]
                   [三個位的id][不同東西2]
---->改到這裏[三個位的id][不同東西3]
id=x+1
循環...



我的想法是用3個不同的StringReplace並設定成1(即只改一行), 然後由上至下每行改, 最後返回下一個id繼續改, 一直loop到找不到下一個id為止, 不過我不知道如何實現...囧

例子:
id=99
0991
0992
0993
id=100
1001
1002
1003
...

其實當初我是想改原文件的, 不過原來可以改複製後的文件的
我之後會將
FileCopy
_FileReadToArray
_FileWriteFromArray
裏的$file & "_origin"
都改成$file & "_converted", 感謝提醒:)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-28 02:18 , Processed in 0.073810 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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