0

我一直在使用以下代码将我的文本文件拆分为两个文件。我的原始文件仅包含 20 行,我试图将其拆分为 2 个文件。即使脚本运行并且我在最后收到消息说过程已完成,我在输出位置看不到任何拆分文件。请告诉我代码中有什么问题;我是 vbscript 的新手,所以请帮助我。在此先感谢 :)

Dim  Counter
Const InputFile = "C:\Cs.txt"
Const OutputFile = "C:\Users\rmehta\Desktop"
Const RecordSize = 10
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile (InputFile, ForReading)
Counter = 0
FileCounter = 0
Set objOutTextFile = Nothing

Do Until objTextFile.AtEndOfStream
if Counter = 0 Or Counter = RecordSize Then
    Counter = 0
    FileCounter = FileCounter + 1
    if Not objOutTextFile is Nothing then objOutTextFile.Close
    Set objOutTextFile = objFSO.OpenTextFile( OutputFile & "_" & FileCounter & ".txt", ForWriting, True)
end if
strNextLine = objTextFile.Readline
objOutTextFile.WriteLine(strNextLine)
Counter = Counter + 1
Loop
objTextFile.Close
objOutTextFile.Close
Msgbox "Split process complete"
4

1 回答 1

1

如果你忽略了所有的虚假脂肪(Textstream 有一个行计数器并且第一个输出文件可以在循环之前打开),你会得到

  Option Explicit
  Const cnSize = 10
  Dim oFS   : Set oFS   = CreateObject("Scripting.FileSystemObject")
  Dim sDir  : sDir      = "..\testdata\18308970"
  Dim tsIn  : Set tsIn  = oFS.OpenTextFile(oFS.BuildPath(sDir, "all.txt"))
  Dim nFCnt : nFCnt     = 0
  Dim tsOut : Set tsOut = oFS.CreateTextFile(oFS.BuildPath(sDir, nFCnt & "-part.txt"))
  Do Until tsIn.AtEndOfStream
     If 0 = tsIn.Line Mod cnSize Then
        tsOut.Close
        nFCnt     = nFCnt + 1
        Set tsOut = oFS.CreateTextFile(oFS.BuildPath(sDir, nFCnt & "-part.txt"))
     End If
     tsOut.WriteLine tsIn.ReadLine()
  Loop
  tsIn.Close
  tsOut.Close

这“有效”——如果你有文件夹、输入文件和权限——是显而易见的。在您的代码中,问题

>> Const OutputFile = "C:\Users\rmehta\Desktop"
>> FileCounter = 0
>> WScript.Echo OutputFile & "_" & FileCounter & ".txt"
>>
C:\Users\rmehta\Desktop_0.txt

是深藏不露。

于 2013-08-19T08:58:44.430 回答