VBScript 读取 CSV 文件到数组

3

我的任务是编写一个vbscript脚本,它可以打开一个.csv文件,将数据读入一个数组中,使用该数据执行函数,然后将更新后的数据返回到同一文件中。我相信我已经完成了除了从文件读取数据的函数之外的所有工作。

我的问题是:当我尝试使用这段代码时,我会收到运行时错误。当前脚本出现类型不匹配的错误。我尝试修改代码以获取不同的运行时错误。

关于此代码的几点说明:

  1. 我希望它跳过csv文件的第一行,因为它是永远不会更改的标题。
  2. 恰好有12个字段。然而,行数是动态的,每个输入文件都会改变。

我的读取文件代码如下:

Function BuildArrayFromCsv(filepath)    'Function to read file and load into an array

Const ForReading = 1    ' Declare constant for reading for more clarity

Set inputFile = FileSysObj.OpenTextFile(filepath, ForReading, True) ' Set inputFile as file to be read from

Dim row, column
Dim fields(11) '12 fields per line  
inputFile.ReadAll 'read to end of file  
ReDim MyArray(11,inputFile.Line-2) 'current line, minus one for header, and minus one for starting at zero  
inputFile.close     'close file so that MyArray can be filled with data starting at the top
Set inputFile = FileSysObj.OpenTextFile(filepath, ForReading, True) 'back at top  
inputFile.ReadLine 'skip header 


Do Until inputFile.AtEndOfStream  
    fields = Split(inputFile.Readline,",") 'store line in temp array  
    For column = 0 To 11 'iterate through the fields of the temp array  
        myArray(row,column) = fields(column) 'store each field in the 2D array with the given coordinates  
    Next
    row = row + 1  'next line 
Loop

inputFile.close
End Function

您有什么问题/疑问? - Ekkehard.Horner
抱歉,我编辑后加入了我的问题。 - user3352792
1个回答

3
在VBScript中,Dim name(n)创建一个大小为n + 1的固定数组;这样的数组不能被动态数组(如Split()返回的)覆盖。证据如下:
>> Dim fields(1)
>> fields = Split("a b")
>>
Error Number:       13
Error Description:  Type mismatch
>> Dim fields
>> fields = Split("a b")
>> WScript.Echo Join(fields)
>>
a b
>>

所以将

替换为

Dim fields(11) '12 fields per line  

使用

Dim fields 'should be 12 fields per line, checking the result of Split() advisable

解释Evidence部分的格式:这是一个未更改的REPL会话副本。 - Ekkehard.Horner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接