關於尋找文件中的目標行及取代指令
本帖最后由 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前如何定義目標檔案??? 1.用_FileReadToArray将文件读入数组,然后循环处理每一行,找到你想要的,进行处理并输出。
2.StringReplace的功能是在字符串中查找指定字符(串),将其替换为另一字符(串)。_ReplaceStringInFile则是在文件中查找并替换。 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好...囧 需求是把每行中的所有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 ; $aFileLine 是文件总行数
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) ; 将数组内容写回文件 需求是把每行中的所有n替换成三位数的上个id值?那么不能用_ReplaceStringInFile,因为你无法确定每个n要替换的值。
#Include
$file = FileOpenDialog("Open", @WorkingDir, "All Files(*.*)" , 1 )
FileCop ...
sensel 发表于 2009-4-26 21:20 http://www.autoitx.com/images/common/back.gif
嗯, 很感謝, 不過試了還是不行
另外我改了一些東西
我想將
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 ; $aFileLine 是文件总行数
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 id=65
0651
0652
0653
0654
...
是不是需要改成这样?每行原来的内容不要了?
还有,你要改的是哪个文件?突然发现你用的文件名是$file & "_origin",那么这个是备份文件,真正要改的是$file这个文件了? 本帖最后由 wongfung 于 2009-4-28 10:53 编辑
id=65
0651
0652
0653
0654
...
是不是需要改成这样?每行原来的内容不要了?
还有,你要改的是哪个文件?突然发现你用的文件名是$file & "_origin",那么这个是备份文件,真正要改的是$file这个文件了?
sensel 发表于 2009-4-27 00:57 http://www.autoitx.com/images/common/back.gif
嗯, 將原内容改成前面三個位, 再由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", 感謝提醒:)
页:
[1]