Imports Microsoft.VisualBasic
Dim strDetail as String = ""
Dim myDataTable as DataTable = ParseDelimSeparatedVariables("", vbTab, Nothing, True)
For Each row As DataRow In myDataTable.Rows
Function ParseDelimSeparatedVariables(data as String, delimStr As String, schema As DataTable, firstRowIsHeader As Boolean) As DataTable
Const SchemaColumnName As String = "Column Name"
Const DefaultState As Integer = 0
Const Instring As Integer = 1
Const FirstQuote As Integer = 2
Const Quote As Char = """"c
If delimStr.Length = 0 Then delimStr = ","
If delimStr.Length <> 1 Then Throw New Exception("Delimiter must be a single character")
Dim delim As Char = delimStr(0)
Dim state As Integer = DefaultState
Dim firstRow As Boolean = True
If Not firstRowIsHeader Then
Dim columnValue As New StringBuilder()
Dim emptySchema As Boolean = schema Is Nothing OrElse schema.Rows.Count = 0
Dim outputCollection As New DataTable()
For Each schemaRow As DataRow In schema.Rows
Dim colName As String = schemaRow(SchemaColumnName).ToString
outputCollection.Columns.Add(colName, GetType(String))
Dim row As DataRow = Nothing
Dim colIndex As Integer = 0
Using sw As New StringReader(data)
Dim line As String = sw.ReadLine()
If line Is Nothing Then Exit While
If state <> Instring Then
row = outputCollection.NewRow
For Each ch As Char In line
columnValue.Append(delim)
Dim colName As String = columnValue.ToString
outputCollection.Columns.Add(colName, GetType(String))
Dim schemaColName As String = schema.Rows(colIndex).Item(SchemaColumnName).ToString
Dim colName As String = columnValue.ToString
If colName <> schemaColName Then
Throw New Exception("Column name mismatch. Column '" & colName & "' dosen't match schema name of '" & schemaColName & "'")
If Not firstRowIsHeader Then
Dim colName As String = "Column " & outputCollection.Columns.Count
outputCollection.Columns.Add(colName, GetType(String))
row.Item(colIndex) = columnValue.ToString
columnValue.Append(Quote)
If columnValue.Length > 0 Then
columnValue.Append(Quote)
Dim colName As String = columnValue.ToString
outputCollection.Columns.Add(colName, GetType(String))
Dim schemaColName As String = schema.Rows(colIndex).Item(SchemaColumnName).ToString
Dim colName As String = columnValue.ToString
If colName <> schemaColName Then
Throw New Exception("Column name mismatch. Column '" & colName & "' dosen't match schema name of '" & schemaColName & "'")
columnValue.Append(vbCrLf)
If Not firstRowIsHeader Then
Dim colName As String = "Column " & outputCollection.Columns.Count
outputCollection.Columns.Add(colName, GetType(String))
row.Item(colIndex) = columnValue.ToString
outputCollection.Rows.Add(row)