Solved

How to parse specific output in vb.net

Posted on 2009-07-13
7
173 Views
Last Modified: 2012-05-07
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

0
Comment
Question by:pover
  • 3
  • 3
7 Comments
 
LVL 28

Expert Comment

by:strickdd
ID: 24841607
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}"
0
 

Author Comment

by:pover
ID: 24841946
Are you suggesting I put
If s.StartsWith("Pinging")


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

?
0
 
LVL 28

Expert Comment

by:strickdd
ID: 24842135
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

0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 

Author Comment

by:pover
ID: 24843543
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.

0
 
LVL 28

Expert Comment

by:strickdd
ID: 24848340
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.
0
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 24848346
The matches would be in matches collection so matches(0) would contain the first match and so on.
0
 

Accepted Solution

by:
pover earned 0 total points
ID: 24849768
Unfortunately, I couldn't get it to work with those suggestions. However, this other code I was
tipped with works.

Dim s As String = sr.ReadLine()
                Do Until s Is Nothing
                    s = sr.ReadLine
                    Try
                        If s.StartsWith("Pinging") Then
                            Dim m As String() = s.Split("[")
                            Dim openbracket As String = m(1)
                            Dim splitlastbracket As String() = openbracket.Split("]")

                            Dim finalIP As String = splitlastbracket(0)

                            WriteLog(finalIP)

                        End If

                    Catch ex As Exception
                        'other error
                    End Try
                Loop
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        Next
        ProgressBar1.Value = 0
        Writer.Close()
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

If you're writing a .NET application to connect to an Access .mdb database and use pre-existing queries that require parameters, you've come to the right place! Let's say the pre-existing query(qryCust) in Access takes a Date as a parameter and l…
Microsoft Reports are based on a report definition, which is an XML file that describes data and layout for the report, with a different extension. You can create a client-side report definition language (*.rdlc) file with Visual Studio, and build g…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now