-1

我想知道是否有一种方法可以从多个文本文件中读取多行以逗号分隔的文本并将它们全部存储在同一个数组中而不会覆盖已经存在的数据?我尝试了多种方法,似乎没有任何效果。因此,例如:

Dim reader As TextFieldParser = New TextFieldParser("text1.txt")
 reader.TextFieldType = FieldType.Delimited
 reader.SetDelimiters(",")
Dim currentrow as string() = reader.ReadFields()
Dim storageArray() as string()
storageArray(0) = currentrow(0)
storageArray(1) = currentrow(1)
currentrow = reader.ReadFields()
storageArray(2) = currentrow(0)
storageArray(3) = currentrow(1)
Dim reader As TextFieldParser = New TextFieldParser("text2.txt")
 reader.TextFieldType = FieldType.Delimited
 reader.SetDelimiters(",")
 currentrow =  reader.ReadFields()
 storageArray(4) = currentrow(0)
 storageArray(4) = currentrow(1)
 ..... etc., etc.

当我尝试将数组的一个值分配给另一个数组时,我不断抛出 System.NullReferenceException ......

我知道 ReadFields() 返回一个数组,所以我也尝试将每一行存储在一个锯齿状数组中,这会引发相同的错误。

作为对此的补充,我是否有更好的方法来做到这一点?我读了很多关于将整个文件读入一个数组然后解析它,但我似乎仍然无法将一个数组的值存储在另一个数组中......

提前感谢大家的帮助!

4

1 回答 1

0

要声明一个字符串数组,正确的语法如下

Dim storageArray(size) as String

其中size是要存储在该数组中的元素数。
因此,您上面的代码根本无法编译。

但是,在您的上下文中,您不知道该数组需要多大,因为您尚未读取该文件。在这种情况下,最好的方法是使用List(Of String)允许将新元素添加到 List 而无需重新调整数组大小的

所以你的代码可以写成

 Dim storageList = New List(Of String)()
 Using reader As TextFieldParser = New TextFieldParser("text1.txt")
     reader.TextFieldType = FieldType.Delimited
     reader.SetDelimiters(",")
     storageList.AddRange(reader.ReadFields())
 End Using
 Using reader As TextFieldParser = New TextFieldParser("text2.txt")
     reader.TextFieldType = FieldType.Delimited
     reader.SetDelimiters(",")
     storageList.AddRange(reader.ReadFields())
 End Using

 ....

请注意,像 TextFieldParser 这样的一次性对象需要在您完成使用后进行处理。因此,将所有内容包含在 Using 语句中

您可以使用 List(Of strig) 循环数据

 for each data in storageList
     Console.WriteLine(data)
 next

或使用单个元素,如数组

Dim data = storageList(0)
于 2015-02-20T22:23:10.717 回答