Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi case string of funktioniert nicht? oO (https://www.delphipraxis.net/118272-case-string-funktioniert-nicht-oo.html)

Darko 4. Aug 2008 12:10


case string of funktioniert nicht? oO
 
Ich wollte endlich mal etwas im Code aufräumen und cases einbauen. Nur merke ich leider jetzt direkt schon, dass es nicht mehr so funktioniert, wie ich möchte. :(

Aus

Delphi-Quellcode:
case sj of
wird:

Zitat:

[Fehler] Unit3.pas(686): Ordinaltyp erforderlich
Gibt es eine denn eine andere Möglichkeit, Strings in eine Art cases zu verschachteln?

Brainshock 4. Aug 2008 12:14

Re: case string of funktioniert nicht? oO
 
Nimm z.B. AnsiIndexText:

Delphi-Quellcode:
case AnsiIndexText(sj, ['Wert1', 'Wert2', 'Wert3']) of
  0: ShowMessage('Wert1');
  1: ShowMessage('Wert2');
  2: ShowMessage('Wert3');
end;
Gruß, Matthias

Phoenix 4. Aug 2008 12:17

Re: case string of funktioniert nicht? oO
 
Einen Workaround (finde ich aber unsauber) gibt es z.B. hier in der Code-Library. Das nächste mal bitte selber suchen ;-)

Alternativ hat jbg aka Andreas Hausladen auch in seinem Delphi-Präprozessor DlangExtensions sowas eingebaut. Das braucht dann halt aber jeder, der an Deiner Anwendung mitarbeitet.

Darko 4. Aug 2008 12:34

Re: case string of funktioniert nicht? oO
 
Funktioniert wunderprächtig. :)

Danke! :)

Ykcim 11. Feb 2011 16:54

AW: case string of funktioniert nicht? oO
 
Hallo,

der Threat ist zwar schon uralt, aber ich finde es am sinnvollsten auf ihm aufzubauen. Ich weiß nämlich nicht genau, wie der CaseString funktioniert und vielleicht kann es mir jemand ganz kurz erklären.

Delphi-Quellcode:
case AnsiIndexText(sj, ['Wert1', 'Wert2', 'Wert3']) of
  0: ShowMessage('Wert1');
  1: ShowMessage('Wert2');
  2: ShowMessage('Wert3');
end;
Ich weiß nicht was AnsiIndexText und was sj sind.

Ansonsten verstehe ich das so, dass Wert1-3 die möglichen Inhalte von AnsiIndexText od sj (bin mir über den Inhalt dieser beiden Komponenten unsicher) sind.
0: Diese Anweisung wird ausgeführt, wenn der Inhalt von AnsiIndexText od sj gleich dem Wert1 sind.
1: Diese Anweisung wird ausgeführt, wenn der Inhalt von AnsiIndexText od sj gleich dem Wert2 sind.
USW.

Könnte ich diese Anweisungen auch aufwendiger gestalten?
Ähnlich
Delphi-Quellcode:
case AnsiIndexText(sj, ['Wert1', 'Wert2', 'Wert3']) of
  0: begin
      if x=y then
        begin
          Blablabla;
        end;
     end;
  1: ShowMessage('Wert2');
  2: ShowMessage('Wert3');
end;
Vielen Dank im Voraus für die Nachhilfestunde ;-)

Gruß

Ykcim

DeddyH 11. Feb 2011 16:58

AW: case string of funktioniert nicht? oO
 
Delphi-Referenz durchsuchenAnsiIndexText sj ist dabei im Beispiel der String, der gesucht wird. Und natürlich kannst Du in Deinen case-Labels noch weitere Prüfungen etc. einbauen.

SirThornberry 11. Feb 2011 17:04

AW: case string of funktioniert nicht? oO
 
Da geht doch der Sinn von Case verloren das es ab einer bestimmten Anzahl performanter ist. Aber wenn vorher der String in einer Funktion verglichen wird ist das ja ein doppeltes vergleichen.

Ykcim 11. Feb 2011 17:04

AW: case string of funktioniert nicht? oO
 
DIE REAKTIONSGESCHWINDIGKEIT IN DIESEM FORUM IST EINFACH WELKLASSE!!!

Vielen Dank!

Ganz verstehe ich es immernoch nicht.:oops:

Wenn ich eine Varible habe (AUSDRUCK) das hätte ich dann in sj gesucht.

Was bedeutet dann "AnsiIndexText"? Ist das eine beliebige Bezeichnung des "Rahmens"?

Wie müsste das deklariert sein?

Gruß

Ykcim

wicht 11. Feb 2011 17:10

AW: case string of funktioniert nicht? oO
 
AnsiIndexText() ist eine normale Funktion, die einen String und ein Array mit Strings übergeben bekommt. Je nach dem, welcher String aus dem Array auf den String (hier sj) passt, gibt die Funktion den Index im Array zurück, so dass dieser vom case ausgewertet werden kann.

HTH

Deep-Sea 11. Feb 2011 17:15

AW: case string of funktioniert nicht? oO
 
Zitat:

Zitat von SirThornberry (Beitrag 1081104)
Da geht doch der Sinn von Case verloren das es ab einer bestimmten Anzahl performanter ist [...]

Dafür bleibt ein anderer Sinn erhalten: Es ist übersichtlicher als dutzende If-then-else Verschachtelungen :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:03 Uhr.
Seite 1 von 2  1 2      

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