Landmine
Landmine

Reputation: 1789

How can I Parse text document in VB,Net for values?

I'm looking to parse this text file into strings to insert them into a database.

Source Text File gets read as the following string:

Line of unwanted text
Another line of unwanted data

Timestamp: 1/1/10 12:00 PM 
ID: 1 
Details: All data processed. Length will vary.

I'd like to just read Timestamp, ID and Details and place them into separate strings to insert them into a data table. What is the best method of capturing everything after the : and to the end of the line?

Dim Details as String = TextFile.Substring(Message.IndexOf("Details:"), X)

Upvotes: 0

Views: 792

Answers (2)

Mark
Mark

Reputation: 8160

If you have to use a String as input, you can use String.Split to break it up into lines, and process each line. String.Substring can be used to extract the rest of the line - I've just hardcoded the starting positions below.

Dim timestamp As String = Nothing
Dim id As String = Nothing
Dim details As String = Nothing
For Each line In input.Split({vbCrLf, vbCr, vbLf}, StringSplitOptions.None)
    If line.StartsWith("timestamp:", StringComparison.OrdinalIgnoreCase) Then
        timestamp = line.Substring(10).Trim()
    ElseIf line.StartsWith("id:", StringComparison.OrdinalIgnoreCase) Then
        id = line.Substring(3).Trim()
    ElseIf line.StartsWith("details:", StringComparison.OrdinalIgnoreCase) Then
        details = line.Substring(8).Trim()
    End If
Next

If you can change how you read the data, then the loop could just be:

For each line In File.ReadLines("your\file\name.txt")
    ...
Next

Upvotes: 1

Karl Stephen
Karl Stephen

Reputation: 1140

Assuming your files are flawless... One way to do it :

Imports System.IO

    Dim AllLines() As String = File.ReadAllLines(FilePath)
    Dim DatasIndex As Int32 = -1

    For i As Int32 = 0 To AllLines.Length - 1
        If AllLines(i).StartsWith("T") OrElse AllLines(i).StartsWith("t") Then
            If AllLines(i).ToUpper().StartsWith("TIMESTAMP: ") Then
                DatasIndex = i
                Exit For
            End If
        End If
    Next

    If DatasIndex > -1 Then
        ' Dim ReadDate As Date = Date.Parse(AllLines(DatasIndex).Substring(11))
        ' Dim ReadID As Int32 = Integer.Parse(AllLines(DatasIndex + 1).Substring(4))
        Dim ReadDate As String = AllLines(DatasIndex).Substring(11)
        Dim ReadID As String = AllLines(DatasIndex + 1).Substring(4)
        Dim ReadDetails As String = AllLines(DatasIndex + 2).Substring(9)

        ' send to database
    End If

You didn't tell if Timestamp: , ID: and Details: Strings are always in the same order and has a trailing space after each property name.

Upvotes: 1

Related Questions