Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - "Case ... Of" Frage
Blackout - Di 11.03.03 00:29
Titel: "Case ... Of" Frage
hi leute,
ich habe gerade mal eine Frage zur Case Anweisung.
Unszwar wollte ich folgendes mal probieren:
Quelltext
1: 2: 3: 4:
| Case edit1.text Of 'test': ShowMessage('Test'); 'exit': Application.Terminate; End; |
Das will irgendwie nicht funktionieren :cry:
Wie geht das genau mit Strings?
Mit Integern gehts:
Quelltext
1: 2: 3: 4:
| Case I Of 1: ShowMessage('Eins'); 2: ShowMessage('Zwei'); End; |
Und noch ne Frage:
Kann man zum Beispiel folgendes machen?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Case I Of 1: Begin // Code End; 2: Begin // Code End; End; |
Danke schonmal im Vorraus
Popov - Di 11.03.03 00:34
Es geht nicht mit Strings. Es geht aber mit Integer's und Char's, also:
Quelltext
1: 2: 3: 4: 5:
| case Integer of 1: ... 2: ... 3, 4: ... usw. |
oder
Quelltext
1: 2: 3: 4: 5:
| case Char of 'a': ... 'b': ... 'c', 'd': ... usw. |
Für Strings mußt du schom if-Abfragen oder CompareText oder CompareStr nehmen.
grayfox - Di 11.03.03 00:40
hallo blackout!
nachdem popov schneller als ich geantwortet hatte, beschränke ich mich auf deine 2. frage:
ja, es funktioniert so:
Quelltext
1: 2: 3: 4: 5:
| case x of 1: begin... irgendwas... end; end; |
darf ich mal was fragen?
warum probierst denn solche sache nicht aus, bevor du im forum nachfragst? meistens kommt man doch durch
try und
error viel schneller zum ziel, oder ?
mfg, stefan
Blackout - Di 11.03.03 00:49
@grayfox
ja du hast recht ich habs auch erst selbst probiert aber mit nem String hab ich es einfach nicht zum laufen gebracht ich dachte das geht.
Und das mit Begin und End das is mir beim Schreiben des Beitrags eingefallen :wink:
@popov
Mit Char's bekomme ich immer nur einen Buchstaben eines Textes heraus :cry:
Wie soll das denn mit CompareText oder CompareStr gehen?
Delete - Di 11.03.03 09:35
Ist deine F1-Taste auch kaputt?
| die Delphi-Hilfe hat folgendes geschrieben: |
Beschreibung
CompareText vergleicht S1 mit S2 und gibt 0 zurück, wenn beide identisch sind. Ist S1 größer als S2, wird ein Integer-Wert größer als 0 zurückgegeben. Ist S1 kleiner als S2, ist der Rückgabewert kleiner als 0. |
usw.
Kurz gesagt: mit der Funktion bekommst du maximal nur 3 Zustände geliefert - der String #1 ist kleiner, gleich, oder größer als String #2. Ich glaube nicht, dass das für eine "case"-ähnliche Abfrage reicht. Daher würde ich, wohl oder übel, "if" vorschlagen.
Ice - Di 11.03.03 09:37
Hi ,
könnte so funktionieren:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| function Vergleich(Text):integer; var HandleI : integer; begin if Comparestr('test',Text)=0 then HandleI := 1 else if Comparestr('exit',Text)=0 then HandleI := 2; else HandleI := 0; result := HandleI; end;
procedure Hauptfunction; var I : integer; begin I := vergleich(Edit1.text); case I of 0:showmessage('Nicht unterstützter Text'); 1:showmessage('Test'); 2:Application.terminate; end; end; |
sollte eigentlich funktionieren ist aber noch nicht getestet...
mfg
Ice
Moderiert von
Tino: Code-Tags hinzugefügt.
Delete - Di 11.03.03 09:43
Schön, dass du deinen Code noch mal geändert hast. :) Nun mach doch bitte noch das [code]-Tag drum herum.
Delete - Di 11.03.03 09:59
@Ice: als Vorschlag
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function Vergleich(Text: string): integer; const ValidThings : array[1..2]of string = ('test','exit'); var i : integer; begin Result := 0; // Standardergebnis
for i := 1 to length(ValidThings) do if(CompareText(Text,ValidThings[i]) = 0) then begin Result := i; // Rückgabewert entspricht dem // Schleifenwert
break; // und abbrechen end; end; |
Das macht Erweiterungen, IMHO, einfacher als endlose if-Abfragen.
Popov - Di 11.03.03 11:04
Natürlich bleibt IF immer einfacher. Allerdings hat CompareText den Vorteil, daß es Groß- und Kleinschreibung ignoriert. Man spart sich also zwei mal AnsiUpperCase.
Blackout - Di 11.03.03 20:52
Danke für die Hilfe :!:
Werds gleich mal ausprobieren
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!