2014-10-17 69 views
0

中的某些列,因此我有一個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

回答

1

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