65.9K
CodeProject is changing. Read more.
Home

Convert CSV File to data table

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.41/5 (9 votes)

Jul 27, 2012

CPOL
viewsIcon

75563

Convert csv file to a data table

Introduction

This class allows you to convert a csv file to a data table. Useful when coding database import applications.

Background

After writing numerous database import applications I decided to create a standard class for reading CSV files and converting them into a Data Table

Using the code

The CSV Reader Class. Firstly we need to know the file location so we create a string attribute to store the file location.

Private FileName As String  

The constructor requires the file location.

 Public Sub New(ByVal FileName As String)
        Me.FileName = FileName
 End Sub

The getcolumns method returns an array of string values. These string values are the column names. these can either be  Names for the first row in the csv file, achieved by setting the columnNames  attribute true or the names are Column1, Column2,.....

  Public Function getColumns(ByVal ColumnNames As Boolean) As String()
        Try
            Dim fileReader As New StreamReader(FileName)
            Dim line As String = fileReader.ReadLine
            fileReader.Close()
            Dim Columns() As String = line.Split(",")
            If ColumnNames Then
                Return Columns
            End If
            Dim i As Integer = 1
            Dim c As Integer = 0
            Dim columnsNames(Columns.Count - 1) As String
            For Each column As String In Columns
                columnsNames(c) = "column" & i
                i += 1
                c += 1
            Next
            Return columnsNames
        Catch ex As Exception
            'log to file    
        End Try
        Return Nothing
    End Function 

The returnData method will return a data table.

    Public Function ReturnData(ByVal ColumnNames As Boolean) As DataTable
        Try
            Dim dt As New DataTable
            For Each columnName In getColumns(ColumnNames)
                dt.Columns.Add(columnName)
            Next
            Dim fileReader As New StreamReader(FileName)
            If ColumnNames Then
                fileReader.ReadLine()
            End If
            Dim line As String = fileReader.ReadLine
            While Not IsNothing(line)
                line = line.Replace(Chr(34), "")
                dt.Rows.Add(line.Split(","))
                line = fileReader.ReadLine
            End While
            fileReader.Close()
            Return dt
        Catch ex As Exception
            'log to file
        End Try
        Return Nothing
    End Function