Autor Beitrag
wubudu
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 18.06.08 17:28 
Hallo Leute,

ich hab ein kleines Problem mit einigen Schleifen. Hier ist der Code:
ausblenden 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();
                        //button2_Click_1(null, null);
                        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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 18.06.08 17:36 
Was ist eine if-Schleife?

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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mi 18.06.08 18:08 
@user profile iconwubudu: Ist die for-Schleife in deinem Beispiel nicht irgendwie überflüssig? Du kannst übrigens auch folgendes machen:
ausblenden 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: :)
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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?)


user profile iconChryzler 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 18.06.08 20:52 
user profile iconwubudu hat folgendes geschrieben:
user profile iconChryzler 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:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mi 18.06.08 20:57 
user profile iconwubudu 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.
user profile iconChristian 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.