Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Strings und Case of (https://www.delphipraxis.net/79536-strings-und-case.html)

alzaimar 25. Okt 2006 16:41

Re: Strings und Case of
 
Zitat:

Zitat von EWeiss
Meiner meinung nach sind IF abfragen als lösung nicht der richtige weg..

Zitat:

Zitat von alzaimar
.... Ich würde einen String sofort nachdem er aufgetaucht ist, in eine Zahl umwandeln, oder hier, in eine Aufzählung (enum), also z.B. (natürlich mit einem Array, das dient hier nur zur Anschauung):

Immer Alles lesen :mrgreen:

EWeiss 25. Okt 2006 16:51

Re: Strings und Case of
 
Zitat:

Immer Alles lesen
Jawohl Chef habs gelesen :duck: :mrgreen:

gruß

Hansa 25. Okt 2006 16:53

Re: Strings und Case of
 
Zitat:

Zitat von EWeiss
Meiner meinung nach sind IF abfragen als lösung nicht der richtige weg..
Stell dir vor du hast 2000 Tiere die überprüft werden müssen, dein Tier ist das 2000
dann muss jede IF abfrage überprüft werden bis du zum ziel kommst...

Deshalb sucht man ja nicht nach einem String ! Man benutzt einen Ordinaltyp, der eben nicht beeinflusst wird von Groß/Kleinschreibung usw. Und die werden eben durchnummeriert (mit IDs etc.). Wer soll denn mit einem 2000-Zeilen Case was anfangen ? Das macht nur Sinn bei Fehlermeldungen, also in Ausnahmefällen.

BigBob 2. Mär 2007 17:32

Re: Strings und Case of
 
Hi Leute!

Bin neu auf dem Board ... naja, ich hol dieses Thema nochmal ans Tageslicht.
Die Idee mit Strings in Integer umzuwandeln ist schön und gut, aber genau das will ich umsetzen. Die Sache ist die: ich habe 32 feste Strings die der Bediener eingeben können muss (später vllt noch ein paar mehr), und die will ich ja gerade in Zahlen umwandeln. Aber da hilft mir "case ... of" nicht weiter. Wie würdet ihr so ein Problem lösen? Mit "if ... then ... else" ist es nur noch mehr schreibarbeit als es mit "case ... of" ohnehin schon ist. Ich hoffe ihr habt da noch einen Vorschlag.


MfG BigBob
PS: ich bin ganz neu in der Materie und versuche mit meinem begrenzten Wissen ein Skat-Computer zu proggen ... das erweist sich aber bisher als heikles unterfangen, dabei bin ich immernoch beim kartengeben und -lesen *grml*

DGL-luke 2. Mär 2007 17:53

Re: Strings und Case of
 
Hallo,

Delphi-Quellcode:
case StrUtils.AnsiIndexStr(['foo','bar']) of
  0:;
  1:;
end;
so was?

BigBob 2. Mär 2007 19:54

Re: Strings und Case of
 
Zitat:

Zitat von DGL-luke
Hallo,

Delphi-Quellcode:
case StrUtils.AnsiIndexStr(['foo','bar']) of
  0:;
  1:;
end;
so was?


Hmmm ... daraus werd ich nicht schlau, da muss ich mir nochmal die Tipps hier Thread angucken.
Ursprünglich sah das bei mir so aus:

Delphi-Quellcode:
case befehl of 'Karo 7'      : gesetzt:=1;
                 'Karo 8'         : gesetzt:=2;
                 'Karo 9'         : gesetzt:=3;
                 'Karo Bube'   : gesetzt:=4;
                 'Karo Dame'   : gesetzt:=5;
                 'Karo König'     : gesetzt:=6;
                 'Karo 10'     : gesetzt:=7;
                 'Karo Ass'       : gesetzt:=8;
                 'Herz 7'         : gesetzt:=9;
                 'Herz 8'         : gesetzt:=10;
                 'Herz 9'         : gesetzt:=11;
                 'Herz Bube'     : gesetzt:=12;
                 'Herz Dame'     : gesetzt:=13;
                 'Herz König'     : gesetzt:=14;
                 'Herz 10'       : gesetzt:=15;
                 'Herz Ass'       : gesetzt:=16;
                 'Pik 7'         : gesetzt:=17;
                 'Pik 8'         : gesetzt:=18;
                 'Pik 9'         : gesetzt:=19;
                 'Pik Bube'       : gesetzt:=20;
                 'Pik Dame'       : gesetzt:=21;
                 'Pik König'     : gesetzt:=22;
                 'Pik 10'         : gesetzt:=23;
                 'Pik Ass'       : gesetzt:=24;
                 'Kreuz 7'       : gesetzt:=25;
                 'Kreuz 8'       : gesetzt:=26;
                 'Kreuz 9'       : gesetzt:=27;
                 'Kreuz Bube'     : gesetzt:=28;
                 'Kreuz Dame'     : gesetzt:=29;
                 'Kreuz König'   : gesetzt:=30;
                 'Kreuz 10'       : gesetzt:=31;
                 'Kreuz Ass'     : gesetzt:=32
                 ELSE gesetzt:=0 END;
Aber ich habs jetz umgeändert mit der "if" Anweisung. Ich nehme den Frage-Button wieder raus, aber trotzdem: muss das sein?:

Delphi-Quellcode:
if befehl='Karo 7' then gesetzta:=1 else        {Kartenwert nach Kartenname ermitteln}
  if befehl='Karo 8' then gesetzta:=2 else
  if befehl='Karo 9' then gesetzta:=3 else
  if befehl='Karo Bube' then gesetzta:=4 else
  if befehl='Karo Dame' then gesetzta:=5 else
  if befehl='Karo König' then gesetzta:=6 else
  if befehl='Karo 10' then gesetzta:=7 else
  if befehl='Karo Ass' then gesetzta:=8 else
  if befehl='Herz 7' then gesetzta:=9 else
  if befehl='Herz 8' then gesetzta:=10 else
  if befehl='Herz 9' then gesetzta:=11 else
  if befehl='Herz Bube'   then gesetzta:=12 else
  if befehl='Herz Dame'   then gesetzta:=13 else
  if befehl='Herz König' then gesetzta:=14 else
  if befehl='Herz 10'   then gesetzta:=15 else
  if befehl='Herz Ass' then gesetzta:=16 else
  if befehl='Pik 7'   then gesetzta:=17 else
  if befehl='Pik 8'   then gesetzta:=18 else
  if befehl='Pik 9'   then gesetzta:=19 else
  if befehl='Pik Bube' then gesetzta:=20 else
  if befehl='Pik Dame' then gesetzta:=21 else
  if befehl='Pik König'   then gesetzta:=22 else
  if befehl='Pik 10' then gesetzta:=23 else
  if befehl='Pik Ass'   then gesetzta:=24 else
  if befehl='Kreuz 7'   then gesetzta:=25 else
  if befehl='Kreuz 8'   then gesetzta:=26 else
  if befehl='Kreuz 9'   then gesetzta:=27 else
  if befehl='Kreuz Bube' then gesetzta:=28 else
  if befehl='Kreuz Dame' then gesetzta:=29 else
  if befehl='Kreuz König'   then gesetzta:=30 else
  if befehl='Kreuz 10' then gesetzta:=31 else
  if befehl='Kreuz Ass'   then gesetzta:=32 else gesetzta:=0;

Wie unschwer auffällt ist das eine Menge Schreibkram. Naja, wenn jemand ne Idee hat, wie es hätte schneller gehen können, bin ich dafür offen. Ansonsten is meine Frage beantwortet.


MfG BigBob

DGL-luke 2. Mär 2007 22:06

Re: Strings und Case of
 
Das is ja bei dir noch viel einfacher...

Delphi-Quellcode:
gesetzt := AnsiIndexStr(['Karo 7'],['Karo 8']{,...})+1;
if gesetzt = -1 then
  gesetzt := 0;

Hobby-Programmierer 2. Mär 2007 22:37

Re: Strings und Case of
 
Nabend ...,
mir fallen spontan 2 mögliche Lösungen ein.
Array definieren
Delphi-Quellcode:
const Karte_Name: Array[1..32] of String = ('Karo 7','Karo 8','Karo 9',
                                            'Karo Bube','Karo Dame','Karo König',
                                            'Karo 10','Karo Ass',
                                            'Herz 7','Herz 8','Herz 9',
                                            'Herz Bube','Herz Dame','Herz König',
                                            'Herz 10','Herz Ass',
                                            'Pik 7','Pik 8','Pik 9',
                                            'Pik Bube','Pik Dame','Pik König',
                                            'Pik 10','Pik Ass',
                                            'Kreuz 7','Kreuz 8','Kreuz 9',
                                            'Kreuz Bube','Kreuz Dame','Kreuz König',
                                            'Kreuz 10','Kreuz Ass');
und dann die Abfragen
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
var i: integer;
    Karte: String;
begin
  Karte:= 'Karo 10';
  for i:= 1 to High(Karte_Name) do
    if Karte_Name[i] = Karte then
      showmessage(Karte+ ' mit Wert '+ IntToStr(i)+ ' gesetzt');
end;

procedure TForm1.ButtonClick(Sender: TObject);
var i: integer;
    Karte: String;
begin
  Karte:= 'Karo 10';
  i:= AnsiIndexStr(Karte, Karte_Name) +1;
  showmessage(Karte+ ' mit Wert '+ IntToStr(i)+ ' gesetzt);
end;
LG Mario


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr.
Seite 3 von 3     123   

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