2013-05-20 90 views
1

我必須使用VBScript在文本行中的某些點插入逗號。我需要它來檢查每行的前四個charcters與if語句,如果它匹配它插入該行爲此所需的逗號是我到目前爲止有:如何在文本中插入逗號?

Const ForReading = 1 
Const ForWriting = 2 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile("H:\Letter Display\Letters\LTRPRT__00000008720000000001NI-K-RMND.txt", ForReading) 

strNIK = "1000" 
strLine = objFile.ReadLine 

If Left(strLine,4) = strNIK then 

    arrCommas = Array(16,31,46,56,66,79,94,99) 

    Do Until objFile.AtEndOfStream 

    intLength = Len(strLine) 
    For Each strComma in arrCommas 
     strLine = Left(strLine, strComma - 1) + "," + Mid(strLine, strComma, intLength) 
    Next 
    strText = strText & strLine & vbCrLf 
    Loop 

end if 

objFile.Close 

Set objFile = objFSO.OpenTextFile("H:\Letter Display\Letters\LTRPRT__00000008720000000001NI-K-RMND.txt", ForWriting) 
objFile.Write strText 
objFile.Close 

如果任何人都可以用做此幫助一個IF聲明,將不勝感激。

回答

1

你需要移動內部的ReadLine和條件的Do..Loop

strNIK = "1000" 
arrCommas = Array(16,31,46,56,66,79,94,99) 

Do Until objFile.AtEndOfStream 
    strLine = objFile.ReadLine 

    If Left(strLine, 4) = strNIK then 
    intLength = Len(strLine) 
    For Each strComma in arrCommas 
     strLine = Left(strLine, strComma - 1) + "," _ 
     + Mid(strLine, strComma, intLength) 
    Next 
    End If 

    strText = strText & strLine & vbCrLf 
Loop 

如果您所要的輸出只包括經修改的線的,招行strText = strText & strLine & vbCrLf條件內:

If Left(strLine, 4) = strNIK then 
    '... 
    strText = strText & strLine & vbCrLf 
End If 

數組中的逗號索引是否已解釋由字符插入引起的位置偏移?

而且,它可能是一個好主意,通過線輸出線寫入到一個臨時文件,然後使用臨時文件替換輸入文件你處理完所有輸入之後:

Set inFile = objFSO.OpenTextFile(inputFilename, ForReading) 
Set outFile = objFSO.OpenTextFile(outputFilename, ForWriting) 

Do Until inFile.AtEndOfStream 
    strLine = inFile.ReadLine 
    'do stuff with strLine 
    outFile.WritLine 
Loop 

inFile.Close 
outFile.Close 

objFSO.DeleteFile inputFilename, True 
objFSO.MoveFile outputFilename, inputFilename 

這樣,你可以在處理大文件時避免內存耗盡。

您可以處理具有特定擴展名的文件在指定目錄這樣的:

folderName = "C:\some\folder" 

For Each objFile In objFSO.GetFolder(folderName).Files 
    If LCase(objFSO.GetExtensionName(objFile.Name)) = "ltr" Then 
    'processing takes place here 
    End If 
Next 

如果你想使用inputfile中/ OUTPUTFILE接近我上面的建議,您可以使用相同的臨時OUTPUTFILE名對於每個輸入文件,或者可以從輸入文件名稱派生輸出文件名稱,例如像這樣:

inputFilename = objFile.Name 
outputFilename = inputFilename & ".tmp" 
+0

非常感謝,你能告訴我如何做一個目錄中的每個文件都具有相同的擴展名.LTR? –