AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Case AnsiIndexText -> Ergebnis verändern
Thema durchsuchen
Ansicht
Themen-Optionen

Case AnsiIndexText -> Ergebnis verändern

Ein Thema von HolgerCW · begonnen am 14. Nov 2013 · letzter Beitrag vom 14. Nov 2013
Antwort Antwort
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

Case AnsiIndexText -> Ergebnis verändern

  Alt 14. Nov 2013, 09:41
Delphi-Version: 2006
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:
Case AnsiIndexText(Wert, ['A', 'B','C']) of

   0: begin
   
   If Z = 1 then
    
    //Springe zu 1
   
   end;

   1:begin
   ...
   end;
    
   2:begin
   ...
   end;
  end;
Gruss

Holger

Geändert von HolgerCW (14. Nov 2013 um 09:43 Uhr) Grund: Hatte die falsche Delphi-Version angegeben
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Case AnsiIndexText -> Ergebnis verändern

  Alt 14. Nov 2013, 09:47
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:
 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;
EDIT : Eine Art ein GoTo zu vermeiden ist, dass Du einfach eine Procedure an beiden Stellen aufrufst.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Case AnsiIndexText -> Ergebnis verändern

  Alt 14. Nov 2013, 10:20
Oder vor dem CASE prüfen und da noch den Index ändern.

Delphi-Quellcode:
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
  ...
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Case AnsiIndexText -> Ergebnis verändern

  Alt 14. Nov 2013, 10:46
Das sieht ja grausam aus ...

Warum nicht so
Delphi-Quellcode:
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;
Und wenn gar nichts mehr geht, dann gibt es noch das State-Pattern
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Case AnsiIndexText -> Ergebnis verändern

  Alt 14. Nov 2013, 10:54
Mein zweites Beispiel sollte man wohl nicht ganz Ernst. (aber wenn es ihm zuviele Zeilen sind, dann halt so )

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;
$2B or not $2B

Geändert von himitsu (14. Nov 2013 um 11:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Case AnsiIndexText -> Ergebnis verändern

  Alt 14. Nov 2013, 10:57
@himitsu

Das ist wohl der KISS of death
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#7

AW: Case AnsiIndexText -> Ergebnis verändern

  Alt 14. Nov 2013, 13:53
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Case AnsiIndexText -> Ergebnis verändern

  Alt 14. Nov 2013, 14:41
Mein zweites Beispiel sollte man wohl nicht ganz Ernst. (aber wenn es ihm zuviele Zeilen sind, dann halt so )
Also ich find's gut.
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
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz