Results 1 to 4 of 4

Thread: [2005] Parsing a traceroute, stopping at the right point

  1. #1

    Thread Starter
    Member
    Join Date
    Nov 2006
    Posts
    63

    [2005] Parsing a traceroute, stopping at the right point

    Hi,

    I've previously received help here with parsing a text file that contains the output of a traceroute. Here's the code I have so far:

    Code:
        Private Function parseLine(ByVal str As String) As String()
            Dim data(5) As String
            Dim index As String
            Dim i As Integer
            Dim del(0) As Char
    
            del(0) = " "
    
            For i = 0 To 4
                str = str.Trim()
                index = str.IndexOf("  ")
                If index <> -1 Then
                    data(i) = str.Substring(0, index)
                    str = str.Substring(index)
                Else
                    data(i) = str.Substring(0)
                End If
            Next
            Return data
        End Function
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim fileReader As StreamReader
            Dim counter As Integer
            Dim data(5) As String
            Dim i As Integer
    
            ' This reads opens the file
            Try
                fileReader = New StreamReader("c:\147-110-250-100.txt")
            Catch
                MsgBox("Cannot find file")
            End Try
    
            Dim currentLine As String = ""
            'Dim blankLineCounter As Integer = 0
            Dim textArray As New ArrayList()
    
            counter = 1
    
            'This will read in each line of the file, starting at 4
            Try
                Do
                    currentLine = fileReader.ReadLine()
                    If Not currentLine Is Nothing Then
                        If counter > 3 Then
                            ' Do things here
                            textArray.Add(currentLine)
                        End If
                        counter += 1
                    End If
                Loop Until currentLine Is Nothing
                fileReader.Close()
            Catch
                MsgBox("Error with file input")
            End Try
    
            'This parses each line then returns the output to a text box
            For i = 4 To textArray.Count
                'Checks if the line number is even or odd - only odd ones have text on them for some reason
                If ((i Mod 2) = 1) Then
                    data = parseLine(textArray(i))
                    txtDisplay.Text = txtDisplay.Text & "Hop number: " & data(0) & vbCrLf
                    txtDisplay.Text = txtDisplay.Text & "First time: " & data(1) & vbCrLf
                    txtDisplay.Text = txtDisplay.Text & "Second time: " & data(2) & vbCrLf
                    txtDisplay.Text = txtDisplay.Text & "Third time: " & data(3) & vbCrLf
                    txtDisplay.Text = txtDisplay.Text & "Hostname: " & data(4) & vbCrLf & vbCrLf
                End If
            Next
        End Sub
    I have two current problems - it is giving me an ArgumentOutOfRangeException at the line 'data = parseLine(textArray(i))' near the bottom - I am trying to get it to read out each of the lines that are stored, with the potential that there is a variable number stored. I thought I catered for this with this: 'For i = 4 To textArray.Count', but evidently not. Where am I going wrong?

    The other problem is I want to stop reading in the data when it stops being about the actual results. Here's the file I'm currently reading from:

    Code:
    Tracing route to ipsec.eskom.co.za [147.110.250.100]
    
    over a maximum of 30 hops:
    
    
    
      1    <1 ms    <1 ms    <1 ms  146.87.49.1 
    
      2    <1 ms    <1 ms     1 ms  gw-salford.netnw.net.uk [194.66.21.150] 
    
      3    21 ms     1 ms     1 ms  gw-nnw.core.netnw.net.uk [194.66.25.97] 
    
      4     1 ms    <1 ms    <1 ms  194.66.25.141 
    
      5     2 ms     1 ms     1 ms  so-0-1-0.warr-sbr1.ja.net [146.97.42.169] 
    
      6     *        4 ms     5 ms  so-0-2-0.read-sbr1.ja.net [146.97.33.109] 
    
      7     6 ms     6 ms     6 ms  lond-scr4.ja.net [146.97.33.146] 
    
      8     6 ms     6 ms     6 ms  po1-0.int-gw4.ja.net [146.97.35.134] 
    
      9     6 ms     7 ms     6 ms  ldn-b3-pos10-0.telia.net [213.248.100.237] 
    
     10     6 ms     6 ms     6 ms  verizon-118106-ldn-b3.telia.net [213.248.104.46] 
    
     11     7 ms     7 ms     7 ms  so-1-2-0.TR2.LND2.ALTER.NET [146.188.4.41] 
    
     12     7 ms     7 ms     8 ms  so-0-0-0.TR1.LND9.ALTER.NET [146.188.15.25] 
    
     13     7 ms     8 ms     8 ms  so-0-0-0.IH2.LND9.ALTER.NET [146.188.2.46] 
    
     14     7 ms     7 ms     7 ms  so-1-0-1.IR1.LND19.ALTER.NET [146.188.2.242] 
    
     15     8 ms     7 ms     7 ms  at0-1-0.cr1.lnd19.alter.net [196.30.229.129] 
    
     16    33 ms   180 ms   179 ms  s6-0-0.cr5.jnb6.alter.net [196.30.229.149] 
    
     17   196 ms   196 ms   200 ms  srp5-0-0.gw3.jnb6.alter.net [196.30.156.5] 
    
     18   183 ms   215 ms   180 ms  196.31.45.182 
    
     19   182 ms   191 ms   180 ms  ipsec.eskom.co.za [147.110.250.100] 
    
    
    
    Trace complete.
    I want to miss off anything that isn't giving me information - for example I want to miss off the text at the start and the 'Trace complete.' at the end. How would I go about this?

    Thanks.

  2. #2

    Thread Starter
    Member
    Join Date
    Nov 2006
    Posts
    63

    Re: [2005] Parsing a traceroute, stopping at the right point

    Any advice on this? I'm still stuck.

  3. #3
    Frenzied Member
    Join Date
    Mar 2005
    Location
    Sector 001
    Posts
    1,577

    Re: [2005] Parsing a traceroute, stopping at the right point

    If an arraylist contains 4 'datas'/has 4 members, their indices look like this:
    0. Data 1
    1. Data 2
    2. Data 3
    3. Data 4
    Array.Count will give you '4' but you can actually address members from 0 to 3. So try For i = 4 To textArray.Count -1.

    One way to ignore non relevant lines is to identify something that is present only in relevant lines. In your case 'ms' looks like a good candidate:
    Code:
    If counter > 3 Andalso currentLine.contains("ms") Then
            ' Do things here
            textArray.Add(currentLine)
    End If
    VB 2005, Win Xp Pro sp2

  4. #4

    Thread Starter
    Member
    Join Date
    Nov 2006
    Posts
    63

    Re: [2005] Parsing a traceroute, stopping at the right point

    Thanks very much - with a little bit of jigging around that solved my problem. I'm still very new this language so I don't know of things such as .contains("string") etc.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width