VBScript,将文本文件加载到数组并分配给变量

时间:2012-12-17 16:33:32

标签: vbscript

嘿有脚本天才,请注意我还在学习VBScript,我已经完全准备好了。所以,只要我有指示,我就会研究你问我的任何事情。

我搜索了建议的问题,我找到了一个可能是我需要的东西,但它是“关闭”,没有链接去寻找其他类似的东西。

这是我想要完成的。我需要获取一个文本文件并将数据加载到一个数组中(如果这是正确的)。此数据包含Pc名称,Pc位置。它将携带大约2000条记录(或行),我需要将每个记录加载到一个变量中。 PC名称没有空格,但Pc位置可能。例如:

Laptop, my bathroom 
Desktop, kitchen 

我想将此信息加载到我可以使用WshShell.SendKeys的变量中并传递关键命令。我已经能够使用两个文本文件“有点”工作并将该数据发送到Excel工作表(因为它可以使用tab并输入)。但是它不是一对一匹配,而是匹配一个到10.因此,如果PC.txt有10个PC名称,而Location.txt上有10个位置(按行顺序匹配每个文件),我的脚本会给我100个结果,不是10.所以,我知道我这样做是错的,需要一些指导。这是我失败的尝试,我准备好了笑声......

Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile1 = objFSO.OpenTextFile("C:\pc.txt", ForReading1)
Set objFile = objFSO.OpenTextFile("C:\Location.txt", ForReading)

'test is my excel file title test, this will allow tabs and enters
WshShell.AppActivate "test"

Const ForReading1 = 1
Dim arrFileLines1()
i = 0
Do Until objFile1.AtEndOfStream
  Redim Preserve arrFileLines1(i)
  arrFileLines1(i) = objFile1.ReadLine
  i = i + 1
Loop
objFile1.Close

Const ForReading = 1
Dim arrFileLines()
i = 0
Do Until objFile.AtEndOfStream
  Redim Preserve arrFileLines(i)
  arrFileLines(i) = objFile.ReadLine
  i = i + 1
Loop
objFile.Close

For Each strLine1 in arrFileLines1
  For Each strLine in arrFileLines
    WshShell.SendKeys strLine1
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys strLine
    WshShell.SendKeys "{ENTER}"
  Next
Next

我一直在研究如何根据“,”来分割这些数据,但是我需要将它变成一个我可以使用的变量并重复击键,如:

笔记本电脑{TAB}我的厨房{ENTER} 桌面{TAB}浴室{ENTER} ........... ETC直到最后。

1 个答案:

答案 0 :(得分:3)

我会使用单个循环和dictionary将两个输入文件加载到数据结构中(假设PC名称是唯一的)。

Const ForReading = 1

Set fso = CreateObject("Scripting.FileSystemObject")

Set names     = fso.OpenTextFile("C:\pc.txt", ForReading)
Set locations = fso.OpenTextFile("C:\Location.txt", ForReading)

Set computers = CreateObject("Scripting.Dictionary")

Do Until names.AtEndOfStream Or locations.AtEndOfStream
  computers.Add names.ReadLine, locations.ReadLine
Loop

names.Close
locations.Close

这将创建一个包含名称/位置对的字典,可以像这样访问:

For Each key In computers
  WScript.Echo key & " is in " & computers(key)
Next

我建议在将数据传递给其他应用程序时避免使用SendKeys,因为至少可以说,该功能的使用往往是不稳定的。根据目标应用程序,可能有更好的方法,例如,如果应用程序公开可以从VBScript控制的COM对象。

如果目标应用程序不能像那样使用RC,你可能最好使用AutoIt,正如其他人似乎已经建议的那样。