Link to home
Start Free TrialLog in
Avatar of pover
pover

asked on

How to parse specific output in vb.net

I have the code working with the exception of it parsing only the output that I require. I'm having problems getting that to work. I'm wanting only the output to be the ip address within the brackets [xxx.xxx.xxx.xxx]


Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If IO.File.Exists("C:\monitorlog.txt") Then
            IO.File.Delete("C:\monitorlog.txt")
        End If
 
        Dim Writer As New IO.StreamWriter("C:\monitor.txt", True)
        Dim item As Object
        For Each item In ListBox1.Items
            Dim machine As String = item.ToString
 
            ProgressBar1.Maximum = ListBox1.Items.Count
            ProgressBar1.Minimum = 0
            If ProgressBar1.Value < ListBox1.Items.Count Then
                ProgressBar1.Value = ProgressBar1.Value + 1
            End If
        Next
        'Try
        Dim si As New System.Diagnostics.ProcessStartInfo("cmd.exe")
 
        'Dim p As Process
        Dim x As String
        'Dim item
        Dim counter As Integer = 100            'you may need to play with this number to get it right for your system
        Dim y(counter) As Char
        Dim i As Integer
        Try
            Dim p As Process = New Process
            Dim entirefile
            Dim oread
 
            p.StartInfo.Arguments = " " & item
            'PrintDriverInfo.exe /S:MyServerName
            p.StartInfo.RedirectStandardOutput = True
            p.StartInfo.RedirectStandardInput = True
 
            p.StartInfo.CreateNoWindow = True
            p.StartInfo.UseShellExecute = False
            p.StartInfo.FileName = "ping.exe"
            p.Start()
 
            Dim sr As IO.StreamReader = p.StandardOutput 'out is a streamreader
            Dim sw As IO.StreamWriter = p.StandardInput  'inn is a streamwriter
            For i = 0 To counter - 1
 
            Next
            While Not p.HasExited
            End While
            Dim s As String = sr.ReadToEnd()
            If s <> "" Then
 
            End If
 
 
 
            If Not s Is Nothing Then
                          
 
 
                If s.StartsWith("Pinging") Then
                    Dim ip As String = s
 
                    If s.StartsWith("Pinging") Then
 
                        Dim u As Integer = s.IndexOf("[")
                        Dim r As Integer = s.IndexOf("]")
                        Dim q As Integer = s.IndexOf("]") - s.IndexOf("[")
                        s = s.Remove(u - r, s.Length - q)
                        WriteLog(s)
 
 
 
 
                        WriteLog(s)
 
 
 
 
                        p.Close()
 
 
                        
                    End If
 
 
                End If
 
            End If
 
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
 
 
 
 
 
 
 
 
 
 
 
        ProgressBar1.Value = 0
        Writer.Close()
        'Start("C:\monitor.txt")
 
 
 
    End Sub

Open in new window

Avatar of strickdd
strickdd
Flag of United States of America image

I would recommend using a regular expression to find the match of xxx.xxx.xxx.

Expression: "\d{1,3}\.\d{1,3}\.\d{1,3}"
Avatar of pover
pover

ASKER

Are you suggesting I put
If s.StartsWith("Pinging")


            Dim ip As String = [String].Format("\d{1,3}\.\d{1,3}\.\d{1,3}")

?
I'm not sure what the VB.Net code is exactly (a little rusty) but here is the C# of what I suggest.
using System.Text.RegularExpressions
 
private void FindMatches(string StringToFindMatches)
{
   Regex myRegEx = new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}");
 
   MatchCollection matches = myRegEx.FindMatches(StringToFindMatches);
 
   //matches will now contain a list of all IP addresses found in the file.
}

Open in new window

Avatar of pover

ASKER

I changed the code to reflect to this but doesn't parse the data

 If Not s Is Nothing Then
         
                ' If s.StartsWith("Pinging") Then
                If True Then

                    Dim ip As String = s

                    Dim myRegEx As New Regex("\d{1,3}\.\d{1,3}\.\d{1,3}")

                    Dim matches As MatchCollection = myRegEx.Matches(ip)

                   
                    WriteLog(s)

It doesn't parse anything I checked with msgbox(s) to be sure.

I need it some way to parse the ip address which is in the brackets on a return ping.
Like you would see in a cmd shell  pinging hostname hostname.whatever.whatever.com [xxx.xxx.xxx.xx]  and have them appear in the Richtexbox that I have on the form.
Currently not just the ip in the brackets but everything else appears in the Richtextbox.

did you check the matches object? It should contain the list of IP addresses that you want. If it is empty, then we need to refine the regex.
Avatar of Nasir Razzaq
The matches would be in matches collection so matches(0) would contain the first match and so on.
ASKER CERTIFIED SOLUTION
Avatar of pover
pover

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial