Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Commandline output to Windows Program

Posted on 2008-10-19
11
349 Views
Last Modified: 2013-12-17
Dear Experts,

I have a command line program which when run, outputs something like this from cmd:

version;3
active;1
interface;eth0
nick;eth0
created;1224363832
updated;1224407701
totalrx;622
totaltx;198
currx;24485590
curtx;1987530
...
and it goes on

How do I capture the value after "totalrx" and display it in a textbox?

Please help.
0
Comment
Question by:narmi2
  • 6
  • 4
11 Comments
 
LVL 3

Expert Comment

by:ddanonimity
ID: 22751539
try this

StreamReader lo_reader = new StreamReader(@#FILE#);
lo_reader.open();
while(!lo_reader.EndOfStream)
{
string ls_input = lo_reader.ReadLine();
      if(ls_input.Contains("totalrx")
      {
            ls_input = ls_input.Replace("totalrx;");
            textbox1.Text = ls_input
      }
}
lo_reader.close();

if you want to display the totalrx before it just remove the replace line. and remember to include the
#include System.IO;
at the top.

have done it quite quickly so you'll have to substitue your names in and beware of caps I might have missed.
0
 
LVL 1

Author Comment

by:narmi2
ID: 22751554
Is this code reading text from a file?
0
 
LVL 1

Author Comment

by:narmi2
ID: 22751575
so far I have this which captures everything and sticks it into a textbox.  I don't know how to display totalrx in the textbox alone?

      protected virtual void OnButton2Clicked (object sender, System.EventArgs e)
      {
            Process p = new Process();
            
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = "the commandline program to run goes here";
            p.Start();
            string output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            
            entry1.Text = output";
      }
0
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 
LVL 63

Accepted Solution

by:
Fernando Soto earned 500 total points
ID: 22752683
Hi narmi2;

You can use a Regular Expression to get the text for the textBox control as shown in the line below.

Fernando

using System.Text.RegularExpressions;
 
entry1.Text = Regex.Match(output, @"(?i)totalrx;(.*?)\r").Groups[1].Value;

Open in new window

0
 
LVL 63

Expert Comment

by:Fernando Soto
ID: 22752745
Hi narmi2;

The meaning of the Regex pattern, "(?i)totalrx;(.*?)\r", is as follows:

  1. (?i) - Tells Regex that the pattern that follows should be evaluated with case insensitive matching.
  2. totalrx; - Look for this sequence of characters in the string.
  3. (.*?)  - Group the next sequence of characters until the first character after the end group, ).
  4. \r - This is a return character and tells to group to stop grouping, in this case.
In this command, Regex.Match(output, @"(?i)totalrx;(.*?)\r").Groups[1].Value;, the Groups[1] tells Regex to return Group 1 the only group in this pattern and Value returns the string of the group.

Fernando
0
 
LVL 1

Author Comment

by:narmi2
ID: 22761880
For some reason the regex is not returning anything?

I tried this, but it's output was blank:

Console.WriteLine (Regex.Match(output, @"(?i)totalrx;(.*?)\r").Groups[1].Value);

If I do the following, it displays text like the text I posted in the original post:

Console.WriteLine (output);
0
 
LVL 63

Expert Comment

by:Fernando Soto
ID: 22762279
Please post your code. I have tested this solution before posting.
0
 
LVL 1

Author Comment

by:narmi2
ID: 22764715
Here's the code:
using System;
using System.Diagnostics;
using System.Text.RegularExpressions;
 
namespace test_console
{
	class MainClass
	{
		public static void Main(string[] args)
		{
                 ProcessStartInfo psi = new ProcessStartInfo ();
                 psi.FileName = "command to execute goes here";
                 psi.Arguments = "optional argument goes here";
                 psi.RedirectStandardOutput = true;
                 psi.UseShellExecute = false;
 
                 Process p =  Process.Start (psi);
                 string ret = p.StandardOutput.ReadToEnd ();
 
                 p.WaitForExit ();
                 Console.WriteLine (Regex.Match(output, @"(?i)totalrx;(.*?)\r").Groups[1].Value);
		}
	}
}

Open in new window

0
 
LVL 1

Author Comment

by:narmi2
ID: 22764721
Please ignore the copy/past error, the line:
Console.WriteLine (Regex.Match(output, @"(?i)totalrx;(.*?)\r").Groups[1].Value);

Should have been:
Console.WriteLine (Regex.Match(ret, @"(?i)totalrx;(.*?)\r").Groups[1].Value);
0
 
LVL 1

Author Closing Comment

by:narmi2
ID: 31507544
Figured it out.  I am coding for Linux so instead of /r I hade to use /n
Thanks for all the help.
0
 
LVL 63

Expert Comment

by:Fernando Soto
ID: 22767123
Yes you are correct files created on Unix type machine do use different line terminators.

Not a problem, glad I was able to help. ;=)
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

829 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