VB:计算csv中的列数

时间:2015-02-23 20:58:05

标签: vb.net csv datatable

所以,很简单。

我正在将CSV导入数据网格,尽管csv总是必须有可变数量的列。

对于3列,我使用此代码:

        Dim sr As New IO.StreamReader("E:\test.txt")
        Dim dt As New DataTable
        Dim newline() As String = sr.ReadLine.Split(";"c)
        dt.Columns.AddRange({New DataColumn(newline(0)), _
                             New DataColumn(newline(1)), _
                             New DataColumn(newline(2))})
        While (Not sr.EndOfStream)
            newline = sr.ReadLine.Split(";"c)
            Dim newrow As DataRow = dt.NewRow
            newrow.ItemArray = {newline(0), newline(1), newline(2)}
            dt.Rows.Add(newrow)
        End While
        DG1.DataSource = dt

这完美无缺。但是我如何计算“换行符”的数量?

我可以以某种方式对新行的数量进行计数吗?任何其他示例代码都不会发出列标题。

如果我的csv文件有5列,我需要Addrange为5而不是3等等。

提前致谢

2 个答案:

答案 0 :(得分:1)

    Dim sr As New IO.StreamReader(path)
    Dim dt As New DataTable
    Dim newline() As String = sr.ReadLine.Split(","c)
    ' MsgBox(newline.Count)
    ' dt.Columns.AddRange({New DataColumn(newline(0)),
    '                     New DataColumn(newline(1)),
    '                    New DataColumn(newline(2))})
    Dim i As Integer
    For i = 0 To newline.Count - 1
        dt.Columns.AddRange({New DataColumn(newline(i))})
    Next
    While (Not sr.EndOfStream)
        newline = sr.ReadLine.Split(","c)
        Dim newrow As DataRow = dt.NewRow
        newrow.ItemArray = {newline(0), newline(1)}
        dt.Rows.Add(newrow)
    End While
    dgv.DataSource = dt
End Sub

答案 1 :(得分:0)

可以使用dt.Columns.Addnewrow.Item将列和项值分别添加到DataTable,以便可以在循环中完成这些操作,而不是针对特定数字进行硬编码列。例如(此代码假定为Option Infer On,因此请根据需要进行调整):

Public Function CsvToDataTable(csvName As String, Optional delimiter As Char = ","c) As DataTable
    Dim dt = New DataTable()
    For Each line In File.ReadLines(csvName)
        If dt.Columns.Count = 0 Then
            For Each part In line.Split({delimiter})
                dt.Columns.Add(New DataColumn(part))
            Next
        Else
            Dim row = dt.NewRow()
            Dim parts = line.Split({delimiter})
            For i = 0 To parts.Length - 1
                row(i) = parts(i)
            Next
            dt.Rows.Add(row)
        End If
    Next
    Return dt
End Function

然后您就可以使用它:

Dim dt = CsvToDataTable("E:\test.txt", ";"c)
DG1.DataSource = dt