2016-09-19 39 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