我有一个保存在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)
错误:
错误:下标超出范围。
请帮忙。
答案 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确保您了解概念,对象和方法。