2012-01-24 38 views
1
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 

我檢查數組的內容在最後,而且只舉行的文本文件中的最後一個記錄,這表明,它覆蓋的陣列覆蓋數組,我怎麼能防止這個?只是想知道這是每次循環

+2

爲什麼還在使用數組鬼混的列表,並使用ReDim保留語句,而不是使用一個列表(字符串)或詞典(串,名單(字符串)什麼是更容易維護/閱讀和更快?看看你最後的問題時問。 –

+0

好吧,我現在使用的字符串列表,我可以訪問索引類似於數組嗎?我想訪問一個特定的字符串列表 – aspiringCoder

+0

是的,您可以像訪問數組一樣訪問列表。 – RBarryYoung

回答

2

我不確定你在做什麼,但如果你想把所有的輸入保存到一個字符串或數組中,你的方法是行不通的。你每次都要覆蓋數組。使用StringBuilder,以便您可以不斷向字符串中添加字符,而不必一次又一次地將相同的數組重複使用到ReDim

編輯:正如@TimSchmelter建議,您也可以使用List<string>保留您的輸入。

2

在上面的第10行,您將modArray設置爲逗號分隔的行內容。這當然會抹去以前的任何內容。

將它重命名爲lineArray。在第12行,切換到使用不同的數組來建立你的列表行值。或者更好的是,一個列表(字符串),所以你不必不斷增加數組的大小。

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 
相關問題