如果文本已存在,则将文本附加到文本文件

时间:2015-05-27 09:53:51

标签: vbscript

我有一个正在运行的脚本,用于替换固定宽度文件中的某些字符(从第2行开始)。

如果目标文件已经存在,想要避免覆盖目标文件。相反,如果存在,则将行(从源文件的第2行开始)附加到目标文件的末尾。我正在努力寻找一个有正确建议的主题。这是当前的代码:

Dim objFSO
dim objFile
dim thisLine
Set objFSO = CreateObject("Scripting.FileSystemObject")


If (objFSO.FileExists("C:\Users\Dimitar\Desktop\BPSDRC\PAYBOTH.dat")) Then
  Set objFile = objFSO.GetFile("C:\Users\Dimitar\Desktop\BPSDRC\PAYBOTH.dat")
Else
  WScript.Quit()
End If

If objFile.Size > 0 Then 'make sure the input file is not empty
    Set inputFile = objFSO.OpenTextFile("C:\Users\Dimitar\Desktop\BPSDRC\PAYBOTH.dat", 1)  'Replace the filename here
    set outputFile = objFSO.CreateTextFile("C:\Users\Dimitar\Desktop\BPSDRC\PAYIMP.dat", TRUE) 'replace it with output filename

    ' first line - leave it as it is
    thisLine = inputFile.ReadLine  
    newLine = thisLine
    outputFile.WriteLine newLine

    'all remaining lines - read them and replace the middle part with 18 zeroes 
    do while not inputFile.AtEndOfStream  
            thisLine = inputFile.ReadLine  ' Read an entire line into a string.
            'the zeroes are to fix issue N1 (payment in other amt)
            'the CDF are to fix issue N2 (payment in local amt)
            newLine = mid(thisLine,1,47) & "000000000000000000" & mid(thisLine,66,121) & "CDF" & mid(thisLine,190)
            outputFile.WriteLine newLine
    loop
    inputFile.Close
    outputFile.Close
    objFSO.DeleteFile "C:\Users\Dimitar\Desktop\BPSDRC\PAYBOTH.dat"
end if

1 个答案:

答案 0 :(得分:11)

打开文件以追加

Option Explicit

Const ForReading = 1, ForAppending = 8

Dim inputFileName, outputFileName
    inputFileName  = "C:\Users\Dimitar\Desktop\BPSDRC\PAYBOTH.dat"
    outputFileName = "C:\Users\Dimitar\Desktop\BPSDRC\PAYIMP.dat"

Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")

    If Not fso.FileExists( inputFileName ) Then
        WScript.Quit
    End If

    If fso.GetFile( inputFileName ).Size < 1 Then 
        WScript.Quit
    End If 

Dim newFile, inputFile, outputFile 
    newFile = Not fso.FileExists( outputFileName )

    Set inputFile = fso.OpenTextFile( inputFileName, ForReading )
    Set outputFile = fso.OpenTextFile( outputFileName, ForAppending, True )

Dim lineBuffer

    lineBuffer = inputFile.ReadLine()
    If newFile Then 
        outputFile.WriteLine lineBuffer
    End If

    Do While Not inputFile.AtEndOfStream  
        lineBuffer = inputFile.ReadLine
        lineBuffer = mid(lineBuffer,1,47) & "000000000000000000" & mid(lineBuffer,66,121) & "CDF" & mid(lineBuffer,190)
        outputFile.WriteLine lineBuffer
    Loop

    inputFile.Close
    outputFile.Close

    fso.DeleteFile inputFileName