Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Etwas wie Set of String gesucht (https://www.delphipraxis.net/35470-etwas-wie-set-string-gesucht.html)

Johannes Maier 7. Dez 2004 18:05


Etwas wie Set of String gesucht
 
Hi,

ich hab da ein Problem (logisch, sonst würd ich ja nicht posten...): Gibt es eine Möglichkeit, so etwas wie ein Set of String zu deklarieren?
Ich habe bestimmte Befehlswörter in einer Tabelle und möchte diese nun in ein Array schreiben, allerdings möchte ich da nicht schreiben:
Delphi-Quellcode:
if sString = 'DEF' or sString = 'ADD' or ...... etc.
sondern eher so:
Delphi-Quellcode:
if sString in Befehle then .....
Aber man kann ja kein Set of String deklarieren, so wie ich das sehe? Wie bekomme ich das hin, eine Menge dieser Befehle (Strings) zu erstellen um dann eine "in"-Abfrage zu machen?

Danke,
Johannes

Btw: Ist es schlimm, wenn ich solche Fragen hier und im DF stelle?

kiar 7. Dez 2004 18:08

Re: Etwas wie Set of String gesucht
 
versuche mal
Delphi-Quellcode:
 befehle = array[1..7] of string;
raik

roderich 7. Dez 2004 18:12

Re: Etwas wie Set of String gesucht
 
würde einfach eine TStringList vorschlagen und dort die Methode IndexOf

Roderich

Johannes Maier 7. Dez 2004 18:14

Re: Etwas wie Set of String gesucht
 
Das mit dem Array teste ich mal, stimmt, dass ich da nicht drauf gekommen bin ;) Das kann ich ja initialisieren :)
Falls das aus dubiosen Gründen nicht funktionieren sollte, werde ich mal TString List versuchen :)

Johannes Maier 7. Dez 2004 18:22

Re: Etwas wie Set of String gesucht
 
Wenn ich schreibe:
Delphi-Quellcode:
arrBefehle: Array[0..2] of String = ('DEF', 'OUT', 'END');
dann kann ich aber den in-Operator nicht verwenden :( gibt es da keine Möglichkeit?

jfheins 7. Dez 2004 18:29

Re: Etwas wie Set of String gesucht
 
Deklarier dir doch einfach einen eigenen Typ wie z.B. TBefehl dann kannst du set of TBefehl machen ...

Johannes Maier 7. Dez 2004 18:33

Re: Etwas wie Set of String gesucht
 
Das hatte ich zuerst gemacht, aber dann brauche ich die doppelte Anzahl an Abfragen, das liegt am Programm, ich muss dann doppelt parsen ;)
Ich versuche es jetzt mit TStringList.

Danke
Johannes

kiar 7. Dez 2004 18:37

Re: Etwas wie Set of String gesucht
 
hallo ,

einmal wie juluis es schreibt oder du schreibst dir eine function die dir den string zurückgibt
Delphi-Quellcode:
private
    function get_befehl(Index :integer):string;
....


function tform1.get_befehl(index:integer)string;

begin
     if index in [1..7] then
        result :=befehl[index]
       else
        result := 'kenn dich nicht';
end;

IngoD7 7. Dez 2004 18:55

Re: Etwas wie Set of String gesucht
 
Zitat:

Zitat von Johannes Maier
Btw: Ist es schlimm, wenn ich solche Fragen hier und im DF stelle?

Schlimm ist, wenn ich morgen mit dem Auto gegen einen Baum fahre.
Aber gut sind Parallelanfragen nicht gerade ....

Johannes Maier 7. Dez 2004 19:17

Re: Etwas wie Set of String gesucht
 
Ok, dann stelle ich sie demnächst nur noch in einem der Foren...
War ja nur, weil es dringend war und schnell gehen musste.

kiar 7. Dez 2004 19:23

Re: Etwas wie Set of String gesucht
 
und wie nun realisiert?

Johannes Maier 7. Dez 2004 19:53

Re: Etwas wie Set of String gesucht
 
Mit einer TStringList, ich adde bei OnFormCreate die ganzen Strings. Und bei der Abfrage teste ich, ob der String in der Liste vorhanden ist.

Dabei stellt sich mir gerade noch eine Frage: Falls der String nocht vorhanden ist, dann ist doch IndexOf(dieserString) < 0 oder wie ist das?

Nothine 8. Dez 2004 03:37

Re: Etwas wie Set of String gesucht
 
jupp, ist der String nicht vorhanden wird laut OH -1 zurückgegeben

maximov 8. Dez 2004 09:42

Re: Etwas wie Set of String gesucht
 
Zitat:

Zitat von Johannes Maier
Wenn ich schreibe:
Delphi-Quellcode:
arrBefehle: Array[0..2] of String = ('DEF', 'OUT', 'END');
dann kann ich aber den in-Operator nicht verwenden :( gibt es da keine Möglichkeit?

Wenn du es sowieso konstant definierst, dann könntest du tatsächlich besser ein set nehmen:

Delphi-Quellcode:
type
  TBefehl = (b_DEF, b_OUT, b_END);
  TBefehle = set of TBefehl;

const
  arrBefehle: Array[TBefehl] of String = ('DEF', 'OUT', 'END');
Das array benutzt du einfach nur zur umformung und rechnest dann mit den sauberen Sets und Enums. Man kann auch den namen, der elemente, holen und sich das array komplett sparen:

Delphi-Quellcode:
uses typInfo;
...
var b:TBefehl;
...
showMessage(GetEnumName(TypeInfo(TBefehle), integer(b));
allerdings ist das array hier schon ganu praktisch, denn...

Delphi-Quellcode:
showMessage( arrBefehl[b] );
ist halt einfacher. Wollte ich nurmal angemerkt haben. Weil mit strings rechnen ist ungeil :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 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