【问题标题】:only read certain columns from a csv仅从 csv 读取某些列
【发布时间】:2014-10-17 11:59:54
【问题描述】:

所以我有一个包含额外逗号的 csv 文件。我知道在特定专栏之后我将不再需要任何东西。所以基本上我不需要第 12 列之后的任何信息。我对 csv 到达我时的外观没有发言权,所以我不能在那里更改它。我想知道是否有办法只读取前 12 列而忽略 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

【问题讨论】:

  • 使用标准的 ReadLines 方法,您不能在行的某个点停止阅读。如果它们具有此选项,您可以尝试搜索一些特定于解析文件的外部库(想到的一个是FileHelpers,但这可能是矫枉过正。所以,除了创建/删除模式时创建您在此处已经有“需要调试”工作方法的列
  • 与其重新发明轮子,不如看看TextFieldParser Class

标签: vb.net csv export-to-csv text-parsing


【解决方案1】:

您真正需要做的就是,在循环底部的Fields 的for 循环中,将For j = 0 to Fields.Count - 1 替换为For j = 0 to 11

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2019-10-09
    相关资源
    最近更新 更多