Imports System.Collections.Generic
"Channel Context Extension Prio State Application Data CallerID Duration Accountcode PeerAccount BridgeID",
"SIP/4700-00005a1b ext-intercom *804701 34 Up Dial SIP/4701,5,IA(beep)b(auto 4700 00:01:14 b9cb3ac4-07bb-4c80-a",
"SIP/4802-00005a19 from-internal 1 Up AppDial (Outgoing Line) 4802 00:15:57 bcc87318-a6c6-46a9-9",
"IAX2/VOIP_CONNECTION macro-dial-one s 55 Up Dial SIP/4802,,Ttrb(func-apply 2006 00:15:57 bcc87318-a6c6-46a9-9",
"SIP/4701-00005a1d from-internal 1 Up AppDial (Outgoing Line) 4701 00:01:13 b9cb3ac4-07bb-4c80-a",
"IAX2/VOIP_CONNECTION macro-dial-one s 55 Up Dial SIP/4801,,Ttrb(func-apply 2035 00:02:18 84b2da36-91d7-4f07-a",
"SIP/4801-00005a1a from-internal 1 Up AppDial (Outgoing Line) 4801 00:02:18 84b2da36-91d7-4f07-a",
Dim table = FlatFileToDataTable(lines)
For Each row As DataRow In table.Rows
For Each col As DataColumn In table.Columns
Private Function FlatFileToDataTable(lines As String()) As DataTable
If (Not lines.Any()) Then
Throw New ArgumentNullException("lines")
If (lines.Count() < 3) Then
Throw New Exception("There must be at least 4 lines, 1 for the header and the 3 lines omitted at the end.")
Dim conversion = New DataTable()
Dim columnPositions = lines.First().Split({" "c}, StringSplitOptions.RemoveEmptyEntries).Select(Function(header) lines.First().IndexOf(header)).ToArray()
For columnPosition As Integer = 0 To columnPositions.Length - 2
conversion.Columns.Add(lines(0).Substring(columnPositions(columnPosition), columnPositions(columnPosition + 1) - columnPositions(columnPosition)).Trim())
conversion.Columns.Add(lines(0).Substring(columnPositions.Last()))
For rowIndex As Integer = 1 To lines.Count() - 4
Dim row = conversion.NewRow()
For columnPosition As Integer = 0 To columnPositions.Length - 2
row(columnPosition) = lines(rowIndex).Substring(columnPositions(columnPosition), columnPositions(columnPosition + 1) - columnPositions(columnPosition))
row(columnPositions.Length - 1) = lines(rowIndex).Substring(columnPositions(columnPositions.Length - 1))