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
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 - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
Hierbei sei auch RegexLab erwähnt. Das kann helfen.
On-the-fly Regex-Tester: Regex-Lab
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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
Bitte benutze die Code Tags. [Hinweis] Wie poste ich richtig? Punkt 6