Vbscript 错误:输入是否超过文件的结尾?
我正在编写VB脚本,我正在尝试读取txt文件并将其放入数组中。 我检查行数并将该变量用于for循环 我在文件末尾收到一个错误输入。 我不知道如何解决这个问题 期待您的帮助 谢谢Vbscript 错误:输入是否超过文件的结尾?,vbscript,Vbscript,我正在编写VB脚本,我正在尝试读取txt文件并将其放入数组中。 我检查行数并将该变量用于for循环 我在文件末尾收到一个错误输入。 我不知道如何解决这个问题 期待您的帮助 谢谢 Dim num As Integer 'Skip lines one by one Do While objTextFile.AtEndOfStream <> True objTextFile.SkipLine ' or strTemp = txsInput.ReadLine Loop num =
Dim num As Integer
'Skip lines one by one
Do While objTextFile.AtEndOfStream <> True
objTextFile.SkipLine ' or strTemp = txsInput.ReadLine
Loop
num = objTextFile.Line - 1
Dim para()
ReDim para(num)
For i = 1 To num
para(i) = objTextFile.ReadLine
Next
Dim num作为整数
“一行一行地跳过
当objTextFile.AtEndOfStream为True时执行此操作
objTextFile.SkipLine'或strTemp=txsInput.ReadLine
环
num=objTextFile.Line-1
第()段
雷迪姆帕拉(num)
对于i=1到num
第(i)段=objTextFile.ReadLine
下一个
有两个原因(如果修复了第一个intp,则第二个intp将播放):
- 您已将该文件读到底。您需要重置或重新打开它
- 不管你找到多少行,你总是在读125行
Dim para()
Dim num As Integer = 0
Do While Not objTextFile.AtEndOfStream
ReDim Preserve para(num)
para(num) = txsInput.ReadLine
num = num + 1
Loop
注意:数组是基于零的,上面的代码将第一行放在索引0处。如果放置索引1及以上的数据(如原始代码中所示),则第一项未使用,并且在使用数组时必须不断跳过第一项
编辑:
我看到您在代码中将
125
更改为num
,这将解决第二个问题。我使用了以下样式的代码,它对小文件很快:
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(strList, ForReading)
strText = objTextFile.ReadAll
objTextFile.Close
arrList = Split(strText, vbCrLf)
非常感谢你的回复。得到了输出无需自己数线
TextStream
对象具有保存当前行号的属性。在读取整个文件之后,即文件中的行数。@ ANSGARWIKESSER:这是一个选项,但是在循环中使用它并不像在读取行的代码行中间的值变化那么直观。您可以使用ReDim-Preserve-para(txsInput.Line)
,但是para(txsInput.Line-1)=txsInput.ReadLine
。只需将上边界增加1:ReDim-Preserve-para(UBound(para)+1):para(UBound(para))=txsInput.ReadLine
。这样,重新确定数组的大小在很大程度上独立于计数器变量。另外,应该注意的是,像这样动态调整数组的大小肯定会执行得很差,因为它会一次又一次地有效地重新创建数组,并将所有元素从旧实例复制到新实例。对于较大的数组,使用System.Collections.ArrayList
实例可能是一个更好的主意。这种方法的缺点是会对空文件产生错误。类似于