【问题标题】:read text file and make it in array - vbscript读取文本文件并将其放入数组中 - vbscript
【发布时间】:2017-06-16 05:25:11
【问题描述】:

我有一个保存在 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。它应该是-空白-吗?然后当我尝试:

msgbox arrServiceList(1)

错误:

错误:下标超出范围。

请帮忙。

【问题讨论】:

  • 作为您的代码,您必须看到该错误...您有一个用于从文件中读取...当读取一行时,请尝试访问 arrServiceList...arrServiceList 没有项目或者只有 1 个项目,您尝试访问 arrServiceList(1) 然后看到该错误
  • 尝试编写 2 个单独的 for...1 用于从文件中读取和一个用于循环 arrServiceList
  • 在您的 split 语句中,您使用了一个空字符串作为分隔符 ("")。为什么?也许您应该发布您的文本文件的确切内容,以便我们为您提供帮助。

标签: arrays vbscript


【解决方案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 的数组包含文件的最后一行。尝试访问 second 元素/索引 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 确保您了解概念、对象和方法。

【讨论】:

  • 神秘的选民,有一些正派的理由来证明你的行为。
猜你喜欢
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多