Laden...

Datenzeile über RS232 empfangen und Daten Anzeigen.

Erstellt von galaxypetro vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.691 Views
G
galaxypetro Themenstarter:in
2 Beiträge seit 2015
vor 9 Jahren
Datenzeile über RS232 empfangen und Daten Anzeigen.

Hallo zusammen,
ich habe folgendes Problem:
Ich bekomme über den Serialport am PC Daten. Ich brauche zur Darstellung am Rechner eine bestimmte Info aus einer bestimmten Zeile.

Die Daten sehen etwa so aus:

+abcde: 1,1,2,2,2,09876543
+drgzji: 2,2,1,1,
+vrntmz: 2,3,Tank leer
+arzi: 5,5,7,2

ich benötige die Info tank leer, wobei hier auch tank halb voll, oder voll stehen kann.

ebenso können hier auch sehr viele Zeilen davor und danach kommen. Ich benötige die Info aus der Zeile die mit +vrntmz beginnt.

Da ich erst mit c# begonnen habe habe ich auch nichts gefunden. Da ich keine Ahnung habe was ich als Suchbegriff eingeben soll.

Mit folgendem Code konnte ich es auslesen, nur geht das nicht wenn Zeilen dazwischen kommen(kann aber vorkommen). Ich habe zwei richtTextBox "en" benutzt. In der Box2 steht dann: Tank leer


private void timer1_Tick(object sender, EventArgs e)
        {

            string A = serialPort1.ReadExisting();
            if ((A != "**"))
            {
                richTextBox1.Text = "";
                richTextBox1.AppendText(A);

            }
            
        }

if (richTextBox1.Text != " ")
            {
                string inhalt = richTextBox1.Text;                               
                if (inhalt.Contains("+vrntmz"))                
                {
                    
                    string B = serialPort1.ReadExisting();
                    string[] id2 = new string[5];
                    id2 = inhalt.Split('\n');
                    string id = id2[2];
                    id2 = id.Split(',');
                    id = id2[2];
                    richTextBox2.Text = id;
                }

Ich würde mich über eine Hilfe von Euch sehr freuen.

Grüße Peter

16.835 Beiträge seit 2008
vor 9 Jahren

Dann hol dir den kompletten Text und splitte ihn bei jeder neuen Zeile (.split('\n').
Anschließend mit foreach über alle Zeilen iterieren.

Wenn Du das Kriterium hast, dass eine Zeile mit etwas beginnt, dann verwende auch StartsWith und nicht Contains; macht ja sonst keinen Sinn.
Anschließen kannst Du entweder String-Operationen verwenden, um an Deinen gewünschten Inhalt zu kommen (SubString) oder Du nimmst den komplizierteren Weg über Regular Expressions.

2.223 Beiträge seit 2005
vor 9 Jahren

Hallo Peter,

ich befürchte, dass Du nicht drum rum kommen wirst, den kompletten Text zu Parsen.

Zum Parsen könntest Du z.B. Reguläre Ausdrücke verwenden
https://msdn.microsoft.com/de-de/library/system.text.regularexpressions.regex%28v=vs.110%29.aspx

Viele Grüße
Lars

2.207 Beiträge seit 2011
vor 9 Jahren

Hierbei sei auch RegexLab erwähnt. Das kann helfen.

On-the-fly Regex-Tester: Regex-Lab

Gruss

Coffeebean

G
galaxypetro Themenstarter:in
2 Beiträge seit 2015
vor 9 Jahren

Vielen Dank, nach "foreach" gesucht und nachgelesen. Das hat dann den Erfolg gebracht.

foreach (string zeile in inhalt) 
                    {
                        if (zeile.StartsWith("+vrntmz"))
                        {
                            string id;
                            inhalt = zeile.Split(',');
                            id = inhalt[2];
                            richTextBox2.Text = id;
                        }

Super Tip.

Grüße Peter

Hinweis von Coffeebean vor 9 Jahren

Bitte benutze die Code Tags. [Hinweis] Wie poste ich richtig? Punkt 6