只读取csv

问题描述:

中的某些列,因此我有一个csv文件,其中包含额外的逗号。我知道在特定专栏之后我不会需要任何东西。所以基本上,我不需要第12栏后面的任何信息。我对csv看起来如何看起来没有发言权,所以我不能在那里改变它。我想知道是否有办法读取前12列并忽略csv文件的其余部分。只读取csv

这就是代码现在的样子。

感谢您的帮助

Private Sub GetData(ByVal Path As String, ByRef DG As DataGridView, Optional ByVal NoHeader As Boolean = False) 
    Dim Fields(100) As String 
    Dim Start As Integer = 1 
    If NoHeader Then Start = 0 
    If Not File.Exists(Path) Then 
     Return 
    End If 
    Dim Lines() As String = File.ReadAllLines(Path) 
    Lines(0) = Lines(0).Replace(Chr(34), "") 
    Fields = Lines(0).Split(",") 
    If NoHeader Then 
     For I = 1 To Fields.Count - 1 
      Fields(I) = Str(I) 
     Next 
    End If 

    dt = New DataTable() 

    For Each Header As String In Fields 
     dt.Columns.Add(New DataColumn(Header.Trim())) 
     Dim desiredSize As Integer = 11 

     While dt.Columns.Count > desiredSize 
      dt.Columns.RemoveAt(desiredSize) 
     End While 

    Next 
    For I = Start To Lines.Count - 1 
     Lines(I) = Lines(I).Replace(Chr(34), "") 
     Fields = Lines(I).Split(",") 

     Dim dr As DataRow = dt.Rows.Add() 
     For j = 0 To Fields.Count - 1 
      dr(j) = Fields(j).Trim() 
     Next 

    Next 

    DG.DataSource = dt 
End Sub 
+0

使用标准的ReadLines方法,您无法在行的某个点停止读取。如果他们有这个选项,你可以尝试搜索一些专门用于解析文件的外部库(一个想到的是[FileHelpers](http://filehelpers.sourceforge.net/),但它可能是矫枉过正的,所以,除了当你创建列时你已经'需要调试'工作方法的创造性/删除模式,除了创造/删除模式 – Steve 2014-10-17 12:19:20

+0

而不是重新发明*,你可能想看看[TextFieldParser Class](http:// msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser(v=vs.110).aspx) – 2014-10-17 13:23:15

真的所有你需要做的是,在for循环,你通过Fields底部迭代,用For j = 0 to 11更换For j = 0 to Fields.Count - 1