Если вы просто выполняете Regex в качестве промежуточного шага перед импортом хорошо отформатированных данных, вы можете попробовать импортировать их прямо в Access. Я собрал небольшой кусочек кода VBA, который успешно работает с вашими примерами данных:
Sub sGetIPData()
On Error GoTo E_Handle
Dim strFile As String
Dim intFile As Integer
Dim strInput As String
Dim strDummy As String
Dim db As DAO.Database
Dim rsData As DAO.Recordset
Set db = DBEngine(0)(0)
Set rsData = db.OpenRecordset("SELECT * FROM tblRegex WHERE 1=2;")
strFile = "J:\downloads\regex.txt"
intFile = FreeFile
Open strFile For Input As intFile
' start by adding the first record
rsData.AddNew
Line Input #intFile, strInput
strDummy = Left(strInput, InStr(strInput, "Index") - 1)
strDummy = Mid(strDummy, 16)
rsData!UserName = Trim(strDummy)
strDummy = Mid(strInput, InStr(strInput, "Index") + 1)
strDummy = Mid(strDummy, InStr(strInput, ":") + 1)
rsData!Index = Trim(strDummy)
Do
Line Input #intFile, strInput
If Left(strInput, 8) = "Username" Then
' insert the record that we have just finished with
rsData.Update
' and now add the next record
rsData.AddNew
strDummy = Left(strInput, InStr(strInput, "Index") - 1)
strDummy = Mid(strDummy, 16)
rsData!UserName = Trim(strDummy)
strDummy = Mid(strInput, InStr(strInput, "Index") + 1)
strDummy = Mid(strDummy, InStr(strInput, ":") + 1)
rsData!Index = Trim(strDummy)
ElseIf Left(strInput, 8) = "Assigned" Then
If InStr(strInput, "Public IP") > 0 Then
strDummy = Trim(Mid(strInput, InStr(strInput, ":") + 1))
strDummy = Left(strDummy, InStr(strDummy, "Public") - 1)
rsData!AssignedIP = Trim(strDummy)
strDummy = Mid(strInput, InStr(strInput, "Public"))
strDummy = Trim(Mid(strDummy, InStr(strDummy, ":") + 1))
rsData!PublicIP = strDummy
Else
rsData!AssignedIP = Trim(Mid(strInput, InStr(strInput, ":") + 1))
End If
ElseIf Left(strInput, 5) = "Login" Then
rsData!LoginTime = Trim(Mid(strInput, InStr(strInput, ":") + 1))
ElseIf Left(strInput, 8) = "Duration" Then
rsData!Duration = Trim(Mid(strInput, InStr(strInput, ":") + 1))
ElseIf Left(strInput, 10) = "Inactivity" Then
rsData!Inactivity = Trim(Mid(strInput, InStr(strInput, ":") + 1))
ElseIf Left(strInput, 6) = "Public" Then
rsData!PublicIP = Trim(Mid(strInput, InStr(strInput, ":") + 1))
Else
Debug.Print "Unknown: " & strInput
End If
Loop Until EOF(intFile)
' finally add the current record
rsData.Update
sExit:
On Error Resume Next
rsData.Close
Set rsData = Nothing
Set db = Nothing
Reset
Exit Sub
E_Handle:
MsgBox Err.Description & vbCrLf & vbCrLf & "sGetIPData", vbOKOnly + vbCritical, "Error: " & Err.Number
Resume sExit
End Sub
Возможно, потребуется еще несколько проверок, но это может помочь вам.
С уважением,