2016-09-19 19 views
0

當運行調試器,我收到以下錯誤,VB.NET閱讀CSV和有條件地將新的領域

型「System.IndexOutOfRangeException」的第一次機會異常出現在HSL文件的Config.exe 其他信息:指數數組的邊界之外。 在HSL文件Config.exe中發生未處理的異常'System.IndexOutOfRangeException'類型 附加信息:索引超出了數組的範圍。 程序'[14044] HSL File Config.vshost.exe:Managed(v4.0.30319)'已退出,代碼爲0(0x0)。

我檢查了csv數據文件im加載實際上是30列長,沒有空白行。但有一些空白字段。

Dim FileName = tbOpen.Text 
    Dim fileout = tbSave.Text 
    Dim lines = File.ReadAllLines(FileName) 
    Dim output As New List(Of String) 

    For Each line In lines 
     Dim fields = line.Split(","c) 
     If fields(0) = "R62167" Then 
      ReDim Preserve fields(fields.Length) 
      fields(31) = "9991" 
     End If 
     If fields(0) = "R62193" Then 
      ReDim Preserve fields(fields.Length) 
      fields(32) = "1999" 
     End If 
     If fields(2) = "2249" Then 
      fields(2) = "0000" 
     End If 

     output.Add(String.Join(","c, fields)) 
    Next 
    File.WriteAllLines(fileout, output) 

回答

1

使用REDIM

If fields(5) = "4WK" Then 
    ReDim Preserve fields(fields.Length) 
    fields(6) = "NewDate" 
End If 
+0

謝謝Mukul Varshney,你已經保存了我的培根!驚人。不能相信它是如此簡單的:) – JustAnAverageSQLuser

+0

感謝您的信息,但獲取較大的數據集的錯誤(約30列) 在mscorlib.dll – JustAnAverageSQLuser

+0

發生類型'System.ArgumentOutOfRangeException'的第一個機會異常將建議您在for循環之外定義具有預期最大列數的字段數組。使用變量計數來更新字段值。 fields(counter)=「NewDate」counter = counter +1,一旦你添加一個值,或者將字段聲明爲List。這與@FloatingKiwi建議的類似。 –

0

而不是使用Fields作爲數組嘗試它作爲列表,因爲這些是可調整大小。

Dim fields = line.Split(","c).ToList() 

那麼你可以做

If fields(5) = "4WK" Then 
    fields.Add("NewDate") 
End If 
+0

由於兩者。這似乎適用於少量的數據,但一旦我嘗試與真正的文件即時通訊嘗試操作我得到 在mscorlib.dll錯誤 發生類型'System.ArgumentOutOfRangeException'的第一個機會異常任何想法? 代碼片段遵循 – JustAnAverageSQLuser

+0

點心文件名= tbOpen.Text 昏暗FILEOUT = tbSave.Text 昏暗線= File.ReadAllLines(文件名) 昏暗輸出作爲新的列表(串) 對於每一行以行 '版本1 Dim fields = line.Split(「,」c) Dim fields = line.Split(「,」c).ToList() 如果fields(28)=「ZIPSPEED」Then fields.Add(「NewDateD」) End If output.Add(String.Join(「,」c,fields)) Next File.WriteAllLines(fileout,output) – JustAnAverageSQLuser

+0

它看到如果有幫助,ms可以在字段(0)以外的任何字段上失敗? – JustAnAverageSQLuser