Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datenzeile über RS232 empfangen und Daten Anzeigen.
galaxypetro
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Datenzeile über RS232 empfangen und Daten Anzeigen.

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16110

beantworten | zitieren | melden

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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Lars Schmitt
myCSharp.de - Experte

Avatar #avatar-2240.jpg


Dabei seit:
Beiträge: 2335
Herkunft: Witten

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

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

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

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
galaxypetro
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

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

Moderationshinweis von Coffeebean (02.03.2015 - 07:31:41):

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

private Nachricht | Beiträge des Benutzers