|
-
Mar 8th, 2007, 07:52 AM
#1
Thread Starter
Member
[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.
-
Mar 9th, 2007, 02:26 PM
#2
Thread Starter
Member
Re: [2005] Parsing a traceroute, stopping at the right point
Any advice on this? I'm still stuck.
-
Mar 9th, 2007, 03:36 PM
#3
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
-
Mar 9th, 2007, 04:02 PM
#4
Thread Starter
Member
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|