2015-05-27 24 views
3

我有一個正在工作的腳本,用於替換固定寬度文件中的某些字符(從第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 

回答

6

公開賽追加

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 
+0

考慮將此鏈接到答案文件:https://msdn.microsoft.com/en-us/library/aa265347( v = vs.60)的.aspx – mountainclimber