Entwickler-Ecke
C# - Die Sprache - Komplizierteres Problem mit for-Schleife
wubudu - Mi 18.06.08 17:28
Titel: Komplizierteres Problem mit for-Schleife
Hallo Leute,
ich hab ein kleines Problem mit einigen Schleifen. Hier ist der Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| string strSuche2 = "STATUS FAILED"; for (int i = 0; i < textBox1Log.Lines.Length; i++) { foreach (string str in textBox1Log.Lines) { if (str.Contains(strSuche2)) { textBox1.AppendText(string.Format("STATUS FALIED\r\n")); timer1.Stop(); return; } } } |
Ich möchte einfach herausfinden ob in der textBoxLog das Wort
STATUS FAILED vorhanden ist. Wenn das gewünschte Wort in der textBoxLog vorhanden ist, soll in der textBox1 auch STATUS FAILED stehen. Falls in der textBoxLog das Wort nicht vorhanden ist, soll einfach
OK in die textBox1 übertragen werden. Nur das Problem ist folgendes: Wenn ich z.B. eine zweite if-Schleife setze, also so:
C#-Quelltext
1: 2: 3: 4:
| if (!(str.Contains(strSuche2))) { textBox1.AppendText(string.Format("STATUS FALIED\r\n")); } |
wird das OK mehrmals angezeigt, was ich aber nicht will. Ich will erst das OK auf die textBox1 übertragen, wenn wirklich das STATUS FAILED nicht vorhanden ist. Nur irgendwie funktioniert das nicht. Ich verwende nebenbei noch einen Timer, damit er regelmäßig prüft.
Ich hoffe mal, dass ihr das Problem versteht. Ich hab den Thread hier in dem Topic gepostet, hoffe das ich hier richtig bin ;).
wubudu :!:
JüTho - Mi 18.06.08 17:36
Was ist eine
if-Schleife [
http://www.if-schleife.de]?
Erst am Schluss
nach der ganzen Schleife wird "OK" hinzugefügt. Dorthin kommst Du nur dann, wenn Du nicht mir return vorher aus der ganzen Methode geflogen bist.
Ich halte es übrigens für besser, wenn eine Methode nicht mittendrin (auch noch in einer Schleife) mit return abgebrochen wird. (Das ist hier allerdings kein Problem.) Besser sind meistens unterschiedliche Abfragen innerhalb der Methode und ein einheitliches return; die Schleife müsste natürlich mit break abgebrochen werden.
Jürgen
Chryzler - Mi 18.06.08 18:08
@
wubudu: Ist die for-Schleife in deinem Beispiel nicht irgendwie überflüssig? Du kannst übrigens auch folgendes machen:
C#-Quelltext
1: 2: 3: 4:
| if (textBoxLog.Lines.Any(s => s.Contains("STATUS FAILED"))) textBox1.Lines.Add("STATUS FAILED"); else textBox1.Lines.Add("OK"); |
Oder ganz kurz: :)
C#-Quelltext
1:
| textBox1.Lines.Add(textBoxLog.Lines.Any(s => s.Contains("STATUS FAILED")) ? "STATUS FAILED" : "OK"); |
EDIT: Hmm, warum eigentlich nicht einfach
textBox1.Text.Contains("STATUS FAILED")?
wubudu - Mi 18.06.08 20:49
Hallo Chryzler,
ich hab deinen Code übernommen, jedoch erhalte ich vom Compiler folgende Fehlermeldung:
Zitat: |
"System.Array" enthält keine Definition für "Add", und es konnte keine Erweiterungsmethode "Add" gefunden werden, die ein erstes Argument vom Typ "System.Array" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) |
Chryzler hat folgendes geschrieben: |
EDIT: Hmm, warum eigentlich nicht einfach textBox1.Text.Contains("STATUS FAILED")? |
Das Problem hab ich im ersten Post beschreiben ;)
wubudu :!:
Christian S. - Mi 18.06.08 20:52
wubudu hat folgendes geschrieben: |
Chryzler hat folgendes geschrieben: | EDIT: Hmm, warum eigentlich nicht einfach textBox1.Text.Contains("STATUS FAILED")? |
Das Problem hab ich im ersten Post beschreiben ;) |
Nope. Chryzler postete einen Code, der das Contains auf den gesamten Text bezieht, Du gehst im ersten Posting auf das Contains ein, welches für jede Zeile aufgerufen wird. Ein Contains auf den gesamten Text scheint mir irgendwie auch die beste Möglichkeit :nixweiss:
Chryzler - Mi 18.06.08 20:57
wubudu hat folgendes geschrieben: |
Hallo Chryzler,
ich hab deinen Code übernommen, jedoch erhalte ich vom Compiler folgende Fehlermeldung:
Zitat: | "System.Array" enthält keine Definition für "Add", und es konnte keine Erweiterungsmethode "Add" gefunden werden, die ein erstes Argument vom Typ "System.Array" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) |
|
Ach das ist falsch von mir, das muss
textBox1.AppendText("STATUS FAILED\r\n"); heißen.
Christian S. hat folgendes geschrieben: |
Nope. Chryzler postete einen Code, der das Contains auf den gesamten Text bezieht, Du gehst im ersten Posting auf das Contains ein, welches für jede Zeile aufgerufen wird. Ein Contains auf den gesamten Text scheint mir irgendwie auch die beste Möglichkeit :nixweiss: |
Jep.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!