写出修改后的文本会删除文件

时间:2015-12-09 22:24:21

标签: vbscript

我想出了一个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。我上面的脚本现在设置为针对一个文件。最终,我会将其设置为整个文件夹。

1 个答案:

答案 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