Click here to Skip to main content
15,886,578 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hi, can you help me please? I have this crazy string from string output = myProcess.StandardOutput.ReadToEnd(); (output is a label now) which I need parse to the datagrids, and remove duplicite rows.

I need split output text to the 4 columns 
Application
DBID
Status
Runmode

and 

When Application start with: mng insert this row to the first datagrid
When Application start with: svc insert this row to the second datagrid

and where is Status: APP_STATUS_RUNNING row will be green.


string:
Application: ws_cp_ixnsrv_mm DBID: 845 Status: APP_STATUS_STOPPED Runmode: EXITED Application: mng_dbserver_p DBID: 469 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: ird_dap DBID: 470 Status: APP_STATUS_UNKNOWN Runmode: EXITED Application: mng_dap DBID: 471 Status: APP_STATUS_UNKNOWN Runmode: EXITED Application: mng_messagesrv_p DBID: 472 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: mng_scs_p DBID: 473 Status: EXITED Error Application: pulse_collector_02 DBID: 827 Status: APP_STATUS_RUNNING Runmode: BACKUP Application: was_tomcat_1 DBID: 829 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: svc_nss_p DBID: 850 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: svc_nss_b DBID: 851 Status: APP_STATUS_STOPPED Runmode: EXITED Error


Thank you for some advice.

What I have tried:

Process myProcess = new Process();

            myProcess.StartInfo.FileName = @"S:\\Program Files\\GCTI\\SCServer_1\\mlcmd.exe";
            // REM    myProcess.StartInfo.Arguments = "-help"
            myProcess.StartInfo.Arguments = "-cshost  -csport  -csappname   -csuser  -cspassword  -scshost  -getallappstatus";

          
            myProcess.StartInfo.UseShellExecute = false;
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.StartInfo.RedirectStandardInput = true;
            myProcess.StartInfo.RedirectStandardOutput = true;
            myProcess.StartInfo.RedirectStandardError = true;
            string message = "Simple MessageBox";

            try
    {
                myProcess.Start();
     }
    catch
  {
                Response.Write("<script>alert('Chyba');</script>");
            }

            string output = myProcess.StandardOutput.ReadToEnd();
            Label2.Text = output;
            Label2.Visible = false;

            string StandardError = myProcess.StandardError.ReadToEnd();
            Label3.Text = StandardError;
Posted
Updated 5-Jul-21 2:44am

That is a standard programming exercise ...
I would do the following :
- split your source-string by the delimiter ' ' - [space]
- now you get an array with all partial elements
- the 1st element now is your categorie, the 2nd the entry for the category, the 3rd again the categorie ... and so on

I think that is not a problem to code it ...
 
Share this answer
 
Comments
Member 15251555 2-Jul-21 5:03am    
Hi, can you help me with code please?
Ralf Meier 2-Jul-21 5:41am    
Excuse me ... what part of my description is unclear for you ?
Don't you know how to handle the SPLIT-Function ? Or to handle Array-Elements ?
Member 15251555 2-Jul-21 7:40am    
maybe both.can you kick me somehow? :)
Ralf Meier 3-Jul-21 2:44am    
No ... sorry ... give it a try - it's easier as you think.
If you have some code which makes problems you are invited to come back and ask something ... but not "please write the code for me" ...
Take a look at your input string (has been changed into rows in helping analyze process):
Application: ws_cp_ixnsrv_mm DBID: 845 Status: APP_STATUS_STOPPED Runmode: EXITED
Application: mng_dbserver_p DBID: 469 Status: APP_STATUS_RUNNING Runmode: PRIMARY
Application: ird_dap DBID: 470 Status: APP_STATUS_UNKNOWN Runmode: EXITED
Application: mng_dap DBID: 471 Status: APP_STATUS_UNKNOWN Runmode: EXITED
Application: mng_messagesrv_p DBID: 472 Status: APP_STATUS_RUNNING Runmode: PRIMARY
Application: mng_scs_p DBID: 473 Status: EXITED Error  <- incomplete data: does NOT contain [APP_STATUS] header!!!
Application: pulse_collector_02 DBID: 827 Status: APP_STATUS_RUNNING Runmode: BACKUP
Application: was_tomcat_1 DBID: 829 Status: APP_STATUS_RUNNING Runmode: PRIMARY
Application: svc_nss_p DBID: 850 Status: APP_STATUS_RUNNING Runmode: PRIMARY
Application: svc_nss_b DBID: 851 Status: APP_STATUS_STOPPED Runmode: EXITED Error


If every "record" would have the same number of headers, it would be very easy to split data:
VB
Dim inputString As String = "Application: ws_cp_ixnsrv_mm DBID: 845 Status: APP_STATUS_STOPPED Runmode: EXITED Application: mng_dbserver_p DBID: 469 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: ird_dap DBID: 470 Status: APP_STATUS_UNKNOWN Runmode: EXITED Application: mng_dap DBID: 471 Status: APP_STATUS_UNKNOWN Runmode: EXITED Application: mng_messagesrv_p DBID: 472 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: mng_scs_p DBID: 473 Status: EXITED Error Application: pulse_collector_02 DBID: 827 Status: APP_STATUS_RUNNING Runmode: BACKUP Application: was_tomcat_1 DBID: 829 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: svc_nss_p DBID: 850 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: svc_nss_b DBID: 851 Status: APP_STATUS_STOPPED Runmode: EXITED Error"
Dim cols As String() = {"Application: ", "DBID: ", "Status: ", "Runmode: "}
Dim result = initialString.Split(cols, StringSplitOptions.RemoveEmptyEntries)

As an inputString does contain incomplete data, you need to write custom method, for eaxmple:
VB
Dim dt As DataTable = New DataTable() 'declare and initilize a datatable object
Dim cols As String() = {"Application: ", "DBID: ", "Status: ", "Runmode: "} 'define columns
dt.Columns.AddRange(cols.Select(Function(c) New DataCOlumn(c.Replace(": ", ""), Type.GetType("System.String"))).ToArray()) 'add columns
'input string
Dim inputString As String = "Application: ws_cp_ixnsrv_mm DBID: 845 Status: APP_STATUS_STOPPED Runmode: EXITED Application: mng_dbserver_p DBID: 469 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: ird_dap DBID: 470 Status: APP_STATUS_UNKNOWN Runmode: EXITED Application: mng_dap DBID: 471 Status: APP_STATUS_UNKNOWN Runmode: EXITED Application: mng_messagesrv_p DBID: 472 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: mng_scs_p DBID: 473 Status: EXITED Error Application: pulse_collector_02 DBID: 827 Status: APP_STATUS_RUNNING Runmode: BACKUP Application: was_tomcat_1 DBID: 829 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: svc_nss_p DBID: 850 Status: APP_STATUS_RUNNING Runmode: PRIMARY Application: svc_nss_b DBID: 851 Status: APP_STATUS_STOPPED Runmode: EXITED Error"
'split string by "Application: " to get "rows"
Dim records = inputString.Split(New String(){"Application: "}, StringSplitOptions.RemoveEmptyEntries) _
	.Select(Function(a) String.Concat("Application: ", a).Split(cols, StringSplitOptions.RemoveEmptyEntries)) _
	.ToList()
	
Dim r As Regex = New Regex("\d{3,}") 'needed to recognize [DBID]
Dim j As Integer = 0
For Each parts As String() In records
	Dim dr As DataRow = dt.NewRow()
	For i As Integer = 0 To parts.Length -1
		If parts(i).ToLower().Equals(parts(i), StringComparison.Ordinal) And parts(i).Contains("_") Then 
			j = 0
		Else
			If parts(i).ToUpper().Equals(parts(i), StringComparison.Ordinal) And parts(i).Contains("_")  Then
				j = 2
			Else
				If r.IsMatch(parts(i)) Then
					j = 1
				Else
					j = 3
				End If
			End If
		End If
		dr(j) = parts(i)
	Next i
	dt.Rows.Add(dr)
Next parts
'bind data
DataGridView1.DataSource = dt
 
Share this answer
 
v2
Comments
Member 15251555 9-Jul-21 4:43am    
In this row show me error in Initialstring - is not declared
Dim result = initialString.Split(cols, StringSplitOptions.RemoveEmptyEntries)
Maciej Los 9-Jul-21 6:25am    
I have never used "initialString" variable. I have used "inputString" variable.
Member 15251555 9-Jul-21 8:37am    
I replaced input string by label.text but nothing happen nothing show.

Dim result = Label2.Text.Split(cols, StringSplitOptions.RemoveEmptyEntries)
Dim records = Label2.Text.Split(New String() {"Application: "}, StringSplitOptions.RemoveEmptyEntries) _
.Select(Function(a) String.Concat("Application: ", a).Split(cols, StringSplitOptions.RemoveEmptyEntries)) _
.ToList()
Maciej Los 9-Jul-21 9:21am    
It's obvious. You're using a small part code of mine.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900