Here is a modification because it worked for comma delimited, but not for my contacts.csv semicolon delimited.
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Public Class CSV
Dim separator As String
Dim nErr As Int32
Private Sub btnLoad_Click(sender As System.Object, e As System.EventArgs) Handles btnLoad.Click
Try
btnLoad.Enabled = False
OpenFileDialog1.Filter = "CSV Files (*.CSV)|*.CSV|All Files (*.*)|*.*"
OpenFileDialog1.FilterIndex = 1
Dim r As DialogResult = OpenFileDialog1.ShowDialog
If r <> Windows.Forms.DialogResult.OK Then
Exit Try
End If
nErr = 0
Dim ts As New TimeSpan(Now.Ticks)
Dim dt As DataTable = parseCSV(OpenFileDialog1.FileName)
Dim ts2 As New TimeSpan(Now.Ticks - ts.Ticks)
DataGridView1.DataSource = dt
MessageBox.Show((ts2.TotalMilliseconds).ToString)
Catch ex As Exception
Finally
btnLoad.Enabled = True
End Try
End Sub
Function parseCSV(filename As String) As DataTable
Dim dt As DataTable = Nothing
Dim fs As FileStream = Nothing
Try
fs = New FileStream(filename, FileMode.Open)
Dim sr As New StreamReader(fs)
Dim sbCSV As New StringBuilder(sr.ReadToEnd)
fs.Close()
separator = tbSeparator.Text
Dim pos As Int32 = 0
Dim vFields(-1) As String, iv As Int32 = 0
Dim firsRow() As String = nextRow(pos, sbCSV)
dt = New DataTable
For i As Int32 = 0 To firsRow.Length - 1
dt.Columns.Add(firsRow(i))
Next
Do While pos < sbCSV.Length
dt.Rows.Add(nextRow(pos, sbCSV))
Loop
Catch ex As Exception
If nErr <> 5 Then
MessageBox.Show(ex.Message)
End If
End Try
Return dt
End Function
Function nextRow(ByRef pos As Int32, sbcsv As StringBuilder) As String()
Dim vRet(-1) As String, iv As Int32 = 0
Try
Do
Dim field As String = nextField(pos, sbcsv)
If field = vbCrLf Then
Exit Do
End If
ReDim …