Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String Collection (https://www.delphipraxis.net/67835-string-collection.html)

Evian 20. Apr 2006 15:30


String Collection
 
Mh.. ich habe gerade irgendwie nen totalen Blackout und bitte daher um Hilfe :)
Ich brauche eine kostannte Sammlung von bestimmten Strings, sodass ich später per 'in'-Operator prüfen kann, ob ein anderer String eines dieser Elemente enthält. Aber wie verflixt noch mal, kann man so eine konstante Collection deklarieren?! :oops:

Danke,

Evian

mirage228 20. Apr 2006 15:34

Re: String Collection
 
Also von einzelnen Zeichen geht so

Delphi-Quellcode:
const
  Coll = ['a', 'b', 'c'];
var
  C: Char;
begin
  C := 'd';
  if C in Coll then ...
end;
Also Sets mit Strings, wo man mit dem "in" Operator arbeiten kann, sind mir allerdings in Delphi.Win32 nicht bekannt...
(Edit: Da gibts lediglich die typisierten Arrays, die Du initialiseren kannst, da geht der in Operator aber nicht...)


mfG
mirage228

H4ndy 20. Apr 2006 15:41

Re: String Collection
 
Das wird nicht gehen, da in einem Set nur "ordinale" Werte gespeichert werden können.
Diese oridinalen Werte wiederum dürfen nur eine maximalen Umfang von 0-254 haben,
das heisst, sie müssen 1 Byte groß sein (Sprich du kannst Zahlen von 0-254 sowie einzelne
Zeichen darin speichern)

Deklarierst du ein Set als (mtBla, mtBlubb, mtSowieso), dann werden diese intern auch
nur als Byte-Zahlen behandelt (mtBla = 0, mtBlubb = 1, mtSowieso = 2,....).

Evian 20. Apr 2006 15:45

Re: String Collection
 
Mh.. man kann nur Ordinal Typen in ein solches Set schreiben?!
Och schade, dachte dass man das auc bei Strings machen kann, also dass ich es dann nutzen kann wie TShiftstate, nur eben als Konstante.

alzaimar 20. Apr 2006 16:37

Re: String Collection
 
Du deklarierst ein Array Of String als Konstante
Delphi-Quellcode:
Const
  cStrings : Array [0..4] of String = ('Zero','Eins','Dwa','Thrie','Vor');
und suchst dann per For-Schleife:
Delphi-Quellcode:
Function StringIn (Const aPattern : String; aStringArray : TStringArray) : Boolean;
Begin
  For i:=....
End;
Oder du packst die Strings in einen String, mit delimiter und suchst mit Pos:
Delphi-Quellcode:
Const
  ccStrings = '#Zero#Eins#Dwa#Thrie#Vor';

Begin
  If Pos ('#'+aPattern, ccStrings)<>0 Then ....
Beides kurz und knapp und ausreichend schnell (wenn man es nicht gerade 100000000 aufruft).

Evian 20. Apr 2006 18:41

Re: String Collection
 
naja ich hatte es jetzt mit IF und mehrmals or gelöst, aber Deine Lösung gefällt mir besser :) .. Danke!


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