我想出了一个vbscript来查找和替换文本文件中一行的字符串。我已经回应了新的一行,以确保它是正确的,但是当我尝试将修改后的文件写出来时,我所得到的只是新行 - 我的文本文件的其余部分都被删除了。
以下是文本文件的示例:
LINE 1
LINE 2
LINE 3
LINE 4
UWI . 040291234500 SOME ADDITIONAL TEXT
LINE 6
LINE 7
我的脚本设置为找到以UWI开头的行,检查040开头的数字是否为14位数,如果不是,则在其末尾附加两个零。
这是脚本:
Const ForReading = 1
Const ForWriting = 2
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Pattern = "^UWI"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("I:\TX-HOU\GeoScience\User\U1\Hgordon\GGX_RECONVERSION\LAS\AG\LOGS\ARROYO_GRANDE\TEST\Adams 2.LAS", ForReading)
Set wrtFile = objFSO.OpenTextFile("I:\TX-HOU\GeoScience\User\U1\Hgordon\GGX_RECONVERSION\LAS\AG\LOGS\ARROYO_GRANDE\TEST\test1.txt", ForWriting)
Do Until objFile.AtEndOfStream
strSearchString = objFile.ReadLine
Set colMatches = objRegEx.Execute(strSearchString)
If colMatches.Count > 0 Then
For Each strMatch in colMatches
uwi = Mid(strSearchString, Instr(strSearchString, "040"), 14)
If Right(uwi, 2) = " " then
newuwi = Left(uwi, 12) + Replace(Right(uwi, 2), " ", "00")
newLine = Left(strSearchString, Instr(strSearchString, "040")) + newuwi + Right(strSearchString, InstrRev(strSearchString, "0")) + vbCrLf
'Wscript.Echo newLine
End If
Next
wrtFile.Write newLine
End If
Loop
objFile.Close
wrtFile.Close
无论我在哪里放置wrtFile.Write newLine,我最终得到的文本文件只包含该行而不是原始文件中的其余行。
我希望无论我做错什么对其他人来说都是显而易见的,因为我到处寻找并找不到合适的答案。
非常感谢任何帮助。
P.S。我上面的脚本现在设置为针对一个文件。最终,我会将其设置为整个文件夹。
答案 0 :(得分:1)
下一段代码可能会有所帮助(在评论中解释):
Do Until objFile.AtEndOfStream
strSearchString = objFile.ReadLine
' assign default `newLine` value to (unchanged) input line
newLine = strSearchString
'
' conditionally modify `newLine` here (not tested)
'
' write `newLine` (changed or unchanged) and newline character to the output file
wrtFile.WriteLine newLine
Loop