1

我必须使用 VBScript 在文本行的某些点插入逗号。我需要它使用 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 声明,将不胜感激。

4

1 回答 1

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

如果你想使用我上面建议的输入文件/输出文件方法,你可以为每个输入文件使用相同的临时输出文件名,或者你可以从输入文件名派生输出文件名,例如:

inputFilename  = objFile.Name
outputFilename = inputFilename & ".tmp"
于 2013-05-20T11:13:11.147 回答