![]() |
Delphi-Version: 2006
Case AnsiIndexText -> Ergebnis verändern
Hallo zusammen,
kann ich das Ergebnis manipulieren, so das wo anders hingesprungen wird ? Siehe unten. Bei dem Ergebnis 0, soll er bei einem bestimmten Ereignis doch nach 1 springen.
Delphi-Quellcode:
Gruss
Case AnsiIndexText(Wert, ['A', 'B','C']) of
0: begin If Z = 1 then //Springe zu 1 end; 1:begin ... end; 2:begin ... end; end; Holger |
AW: Case AnsiIndexText -> Ergebnis verändern
Delphi bietet zwar ein Goto (da heißt das Label), ist aber eine grauenvolle Art zu programmieren und kann eigentlich immer umgangen werden. Trotzdem ein Beispiel mit Label:
Delphi-Quellcode:
EDIT : Eine Art ein GoTo zu vermeiden ist, dass Du einfach eine Procedure an beiden Stellen aufrufst.
var
i : Integer; label GotoLabel; begin for i := 1 to 10 do begin ShowMessage('i = '+IntToStr(i)); if i = 4 then Goto GotoLabel; // Conditionally exit the loop end; ShowMessage('The loop finished OK'); GotoLabel: ShowMessage('Loop finished with i = '+IntToStr(i)); end; |
AW: Case AnsiIndexText -> Ergebnis verändern
Oder vor dem CASE prüfen und da noch den Index ändern.
Delphi-Quellcode:
:stupid:
I := AnsiIndexText(Wert, ['A', 'B','C']);
if (I = 0) and (Z = 1) then I := 1; case I of 0: begin ...
Delphi-Quellcode:
if IfThen((UpperCase(Wert) = 'A') and (Z = 1), 1, AnsiIndexText(Wert, ['A', 'B','C'])) of
case I of 0: begin ... |
AW: Case AnsiIndexText -> Ergebnis verändern
Das sieht ja grausam aus ...
Warum nicht so
Delphi-Quellcode:
Und wenn gar nichts mehr geht, dann gibt es noch das
procedure foo;
begin ... end; procedure bar; begin ... end; case AnsiIndexText( Wert, ['A', 'B', 'C'] ) of 0 : foo; 1 : if Z=1 then foo else bar; 2 : begin foo; bar; end; end; ![]() |
AW: Case AnsiIndexText -> Ergebnis verändern
Mein zweites Beispiel sollte man wohl nicht ganz Ernst. (aber wenn es ihm zuviele Zeilen sind, dann halt so :lol:)
Wenn in dem CASE jeweils nur 1-3 Zeilen stehen, dann würde ich eher Variante bevorzugen, oder das CASE gegen ELSE-IFs austauschen. Es gibt tausende Wege es zu lösen, also wie wäre es beispielsweise mal mit etwas Mathematik?
Delphi-Quellcode:
// angenommen Z kennt nur 0 und 1
case AnsiIndexText(Wert, ['A', 'B','C']) + (Z * 10) of 00: ... 01, 11, 10: ... 02, 12: ... end; |
AW: Case AnsiIndexText -> Ergebnis verändern
@himitsu
Das ist wohl der KISS of death :mrgreen: |
AW: Case AnsiIndexText -> Ergebnis verändern
Danke für die info.
Habe es jetzt ausgelagert in eine Funktion und rufe die auf. Goto gefällt mir nämlich auch nicht ... Gruss Holger |
AW: Case AnsiIndexText -> Ergebnis verändern
Zitat:
Die Programmierer wollen es ja heutzutage immer so einfach haben und hängen im Dämmerschlaf vor ihrem PC rum und trinken Kaffee. Da tut es richtig gut wenn's mal nicht so einfach ist und die grauen Zellen auf Trab kommen :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz