While Not sr.EndOfStream
line = sr.ReadLine
If line.Contains("Year") Then
currentYear = line.ToString
ElseIf line.Contains("mandatory") Then
moduleStats = "M"
ElseIf line.Contains("optional") Then
moduleStats = "O"
ElseIf line.Contains("COM") Then
modArray = line.Split(",")
Dim i As Integer = modArray.Length
ReDim Preserve modArray(modArray.Length + 1) 'ReDim statement to change the size of one or more dimensions of an array,
'Preserve you can resize that dimension and still preserve all the contents of the array
modArray(i) = moduleStats
modArray(i + 1) = currentYear.ToString()
String.Join(",", modArray)
MsgBox(String.Join(",", modArray))
End If
End While
我在最后检查了数组的内容,它只保存了文本文件中的最后一条记录,这表明它正在覆盖数组,我该如何防止这种情况?
答案 0 :(得分:2)
我不确定你要做什么,但是如果你试图将所有输入保存到单个字符串或数组中,那么你的方法就不行了。你每次都要覆盖数组。使用StringBuilder
,这样您就可以不断为字符串添加字符,而无需反复ReDim
相同的数组。
编辑:正如@TimSchmelter建议的那样,您也可以使用List<string>
来保持输入。
答案 1 :(得分:2)
在上面的第10行,您将modArray
设置为该行的逗号描述内容。这当然会消除以前的所有内容。
将其重命名为lineArray。在第12行,切换到使用不同的数组来构建列表行值。或者更好的是List(Of String),因此您不必继续添加数组的大小。
答案 2 :(得分:0)
为什么你不只是像这样创建你的字符串,而不是拆分然后再加入?
line = line & "," & moduleStats & "," & currentYear
然后你会使用字符串列表
Dim lines = new List(Of String)
While Not sr.EndOfStream
' Get the information as you have shown above
lines.Add(line)
End While