【问题标题】:VBSCRIPT to read multi files into an array then write them to a single fileVBSCRIPT 将多个文件读入数组,然后将它们写入单个文件
【发布时间】:2014-07-03 09:37:20
【问题描述】:

正如标题所暗示的,我有三个单独的文本文件,我想按特定顺序将它们连接在一起(即,附加 file1、file2、file3(按顺序)以生成 file4)。

根据我的阅读,使用 VBScript 执行此操作需要 FileSystemObject 将文件读取到数组中,然后将内容写入新文件(如果建议,我愿意接受任何适用于 VBScript 的内容)

我的代码存在以下问题: 1) 脚本运行,但不产生数据 2)在我让它运行之后,文件必须按照我上面建议的顺序(每行)按照数组的顺序附加到输出文件中。

这是我正在使用的数组示例:

代码

Const ForReading = 1


Dim arrServiceList(2)
arrServiceList(0) = strText1
arrServiceList(1) = strText2
arrServiceList(2) = strText3


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.CreateTextFile("output.txt")


Set objTextFile1 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample1.txt", ForReading)
Set objTextFile2 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample2.txt", ForReading)
Set objTextFile3 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample3.txt", ForReading)

    strText1 = objTextFile1.ReadAll
    objTextFile1.Close

    strText2 = objTextFile2.ReadAll
    objTextFile2.Close

    strText3 = objTextFile3.ReadAll
    objTextFile3.Close


    objOutputFile.WriteLine arrServiceList(0)
    objOutputFile.Close

=====================

更新我的代码 5-15-15(下面帖子中的更正说明)

代码

   Const ForReading = 1


  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objOutputFile = objFSO.CreateTextFile("output.txt")


  Set objTextFile1 = objFSO.OpenTextFile("C:\Users\Brill\Desktop\Grab1.txt", ForReading)
  Set objTextFile2 = objFSO.OpenTextFile("C:\Users\Brill\Desktop\Grab2.txt", ForReading)
  Set objTextFile3 = objFSO.OpenTextFile("C:\Users\Brill\Desktop\Grab3.txt", ForReading)

  Do While objTextFile1.AtEndOfStream <> True
  Do While objTextFile2.AtEndOfStream <> True
  Do While objTextFile3.AtEndOfStream <> True

    strText1 = objTextFile1.ReadLine
    objOutputFile.Write strText1 & vbTab 

    strText2 = objTextFile2.ReadLine
    objOutputFile.Write strText2 & vbTab 

    strText3 = objTextFile3.ReadLine
    objOutputFile.Write strText3 & vbTab &  vbCrLf

  Loop
  Loop
  Loop

objOutputFile.Close

objTextFile1.Close
objTextFile2.Close
objTextFile3.Close   

【问题讨论】:

  • 我遗漏了一件事;假设三个示例文件可以包含任何内容。出于测试目的,使用三个不同的单词创建三个文本文件就可以了。

标签: file-io vbscript filewriter


【解决方案1】:

下面的作品。 你的脚本有问题。 1. 您在填充变量之前将变量分配给数组。 2. 你没有写数组的所有元素。

Const ForReading = 1


Dim arrServiceList(2)


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.CreateTextFile("output.txt")


Set objTextFile1 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample1.txt", ForReading)
Set objTextFile2 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample2.txt", ForReading)
Set objTextFile3 = objFSO.OpenTextFile("C:\Users\95540\Desktop\Sample3.txt", ForReading)

    strText1 = objTextFile1.ReadAll
    objTextFile1.Close

    strText2 = objTextFile2.ReadAll
    objTextFile2.Close

    strText3 = objTextFile3.ReadAll
    objTextFile3.Close

    arrServiceList(0) = strText1
    arrServiceList(1) = strText2
    arrServiceList(2) = strText3


    objOutputFile.WriteLine arrServiceList(0)
    objOutputFile.WriteLine arrServiceList(1)
    objOutputFile.WriteLine arrServiceList(2)
    objOutputFile.Close

【讨论】:

  • 得到了它的工作,但经过进一步的改变。上述版本的问题是让文本(在处理所有三个文件中的多行时)每行一次输出一个部分(例如:DocA DocB DocC ...为了解决这个问题,我做到了以下内容: 1) 抛弃了数组; 2) 将 ReadALL 改为 ReadLine;并且,3) 将 Line 写入和读取对象/过程放入 DO WHILE LOOP。我包括下面的代码。但是,我仍然收到一个错误,我不知道该怎么办(输入文件末尾)。该文件现在有效!对错误有什么建议吗?
  • 您通常应该编辑您的问题,而不是更新其他人发布的答案。尝试为每个输入文件设置一个单独的循环,而不是嵌套树。我想说这就是你的错误所在。
【解决方案2】:

将多个集合(例如一些“列文件”)合并/压缩到一个集合(例如“表格文件”)中是标准解决方案策略的标准问题(不是涉及将“文件读入数组”)。

这个演示代码:

Option Explicit
Dim goFS  : Set goFS  = CreateObject("FileSystemObject")
Dim oFZip : Set oFZip = New cFZip
oFZip.m_aIFSpecs = Split("..\data\a.txt ..\data\b.txt ..\data\c.txt")
oFZip.zip "..\data\abc.txt"
WScript.Echo goFS.OpenTextFile("..\data\abc.txt").ReadAll()

Class cFZip
  Public m_aIFSpecs ' array of input files
  Function zip(sOFSpec)
    Dim tsOut : Set tsOut = goFS.CreateTextFile(sOFSpec)
    Dim nUBFiles : nUBFiles = UBound(m_aIFSpecs)
    ReDim aFiles(nUBFiles)
    Dim f
    For f = 0 To nUBFiles
        Set aFiles(f) = goFS.OpenTextFile(m_aIFSpecs(f))
    Next
    Dim bDone
    Do
       Redim aData(UBound(m_aIFSpecs))
       bDone = True
       For f = 0 To nUBFiles
           If Not aFiles(f).AtEndOfStream Then
              bDone = False
              aData(f) = aFiles(f).ReadLine()
           End If
       Next
       If Not bDone Then tsOut.WriteLine Join(aData, ",")
    Loop Until bDone
    For f = 0 To nUBFiles
        aFiles(f).Close
    Next
    tsOut.Close
  End Function
End Class

输出:

1,10,100
2,20,200
3,30,300
4,,400
,,500

显示了基本方法。我使用一个类来使实验/特定的适应(例如分隔符、引用、...)更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多