读取文本文件并使其成为数组--vbscript

时间:2017-06-16 05:25:11

标签: arrays vbscript

我有一个保存在arraylist.txt文件中的列表

-blank-
A1
A2
A3
A4

然后我需要读取文本文件,拆分它并且如果文本文件的值有一个数组。

 Const ForReading = 1
Dim arrServiceList
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("D:\TestStatus\arraylist.txt", ForReading)

Do Until objTextFile.AtEndOfStream
  strNextLine = objTextFile.Readline
  arrServiceList = Split(strNextLine , "")
  Wscript.Echo "Server name: " & arrServiceList(0)
  For i = 1 To UBound(arrServiceList)
    WScript.Echo "Service: " & arrServiceList(i)
  Next
Loop

这是我读取和拆分文件内容的方法。但是当我尝试:

msgbox arrServiceList(0)

提示A4。它应该是-blank-?然后,当我尝试:

msgbox arrServiceList(1)

错误:

  

错误:下标超出范围。

请帮忙。

1 个答案:

答案 0 :(得分:1)

在您的other question输入文件中没有空白的第一行。所以解雇那个把它放在那里的白痴。

@JosefZ告诉你VBScript数组从零到UBound()/ Last Index。所以阅读仔细回答。

>> s = "splitting a string on the empty string """" gives an one elm array containg that string"
>> a = Split(s, "")
>> WScript.Echo LBound(a), UBound(a), a(0)
>>
0 0 splitting a string on the empty string "" gives an one elm array containg that string

因此在循环之后,大小为1 / UBound 0的数组包含文件的最后一行。尝试访问第二个元素/索引1会导致错误。

要将单列文件读入数组,请在EOL分隔符上使用ReadAll()和Split()。如:

Option Explicit

Dim s : s = CreateObject("Scripting.FileSystemObject").OpenTextFile(".\44581406.txt").ReadAll()
WScript.Echo s
WScript.Echo "------------"
Dim a : a = Split(s, vbCrLf)
WScript.Echo Join(a, "<>")

输出:

cscript 44581406.vbs
A1
A2
A3

仔细查看输出 - 您是否看到了SplitOnReadAll方法的问题/缺点?

使用docs确保您了解概念,对象和方法。