Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Type und getEnumValue (https://www.delphipraxis.net/168820-type-und-getenumvalue.html)

DavidKlimas 12. Jun 2012 21:52

Type und getEnumValue
 
Hallo zusammen,

ich habe verschiedene listen und je nach eingabe des benutzer möchte ich wissen, welche position ein bestimmtes Word in jeder dieser listen hat. Zuerst dachte ich an ein "Array of String" aber die suche nach dem Wort scheint doch ziemlich zeitaufwendig zu sein.

Deshalb versuche ich mich an folgendem :

Delphi-Quellcode:
Type
LList1 = (en_, er_, _de, der, ung, ich, sch, _di, nd_, ie_, die, _be, und, ein, _un, che, ng_, ten, ch_, gen, den, _in, _au, _ei, in_, nde, eit, cht, ter, es_, ber, ver, _zu, on_, _vo, _ge, ste, _da, end, hen, nge, te_, ine, lic, nte, ers, _an, it_, run, ere, _mi, _er, aus, ion, _ve, ren, _si, ert, and, ist, nen, auf, sta, _we, uer, ent, des, ht_, ebe, mit, fue, tio, ngs, von, ne_, ges, bei, _st, rei, ati, ell, rde, ach, men, st_, he_, isc, ege, sse, im_, wer, ite, _fu, eru, ier, est, em_, das, _im, lle);
LList2 = (es_, _de, de_, ion, ent, nt_, on_, _le, tio, le_, _co, re_, _la, la_, les, ati, que, des, ns_, _en, et_, _pa, men, _l_, ur_, _qu, ue_, _un, ne_, _et, _d_, _à_, _pr, ant, par, our, te_, _po, ons, con, en_, er_, _au, eme, ce_, tre, est, _ce, rs_, ts_, eur, ont, _so, _in, res, _se, lle, iqu, _su, _dé, ire, _re, nce, _du, _es, is_, com, du_, ans, té_, pro, _pe, pou, it_, nte, _di, une, ux_, un_, st_, _ma, dan, _ré, cti, onn, se_, ité, urs, au_, _da, ect, son, sur, ell, ist, me_, ar_, age, air, us_)
...
Die Nachfrage würde dann etwa so aussehen :
Delphi-Quellcode:
getEnumValue(TypeInfo(LList1), 'rde'));
getEnumValue(TypeInfo(LList2), 'rde'));
...
Das problem liegt nun an den listen selbst. In der ersten list zum beispiel habe ich ein "end" was mir nun einen Fehler beim Kompilieren bringt.

Vielleicht gibt es andere wege das problem zu lösen ?

Danke

himitsu 12. Jun 2012 22:34

AW: Type und getEnumValue
 
Delphi-Referenz durchsuchenGetEnumName was man übrigens selbst gefunden hätte, hätte man mal in die OH gesehn denn in Delphi-Referenz durchsuchenGetEnumValue wird das verlinkt. :angle2:

Und da du nicht verraten hast, welche Delphiversion du nutzt, verrate ich auch nicht die Möglichkeiten der neuen RTTI.

and, end und andere "reservierte Wörter" sind nunmal nicht möglich.
Man kann höchstens versuchen ein & voranzustellen (
Delphi-Quellcode:
&and
), aber wie wäre es mit einem Prefix?
Das kann man anhängen, wenn man den ordinalen wert sucht und abschneiden, wenn man den String hat.

Nutzt du irgendwo im Programm überhaupt diese ENUMs?
Also die Werte ala "en_" selber. Den Typen "LList1" kann man z.B. als Byte deklarieren und das Andere einfach nur als String-Array-Konstante.




PS: Ich glaub deine Shift-Taste funktioniert etwas unregelmäßig. (das zu Lesen ist da nicht so einfach)

DavidKlimas 13. Jun 2012 00:02

AW: Type und getEnumValue
 
Hallo,

ich benutze Delphi 2010, Architekt.

Gruss

himitsu 13. Jun 2012 08:21

AW: Type und getEnumValue
 
Dann würde ich dir die Unit "RTTI", zusätzlich zur "TypInfo" empfehlen.

Das fängt mit TRTTIContext.Create an und von da kann man sich bis zu allem durchhangeln.
Im Forum sollte sich schon Einiges finden lassen. (kann aber heut Abend daheim nochmal etwas Code raussuchen)

DavidKlimas 13. Jun 2012 20:23

AW: Type und getEnumValue
 
Zitat:

Zitat von himitsu (Beitrag 1170533)
Delphi-Referenz durchsuchenGetEnumName was man übrigens selbst gefunden hätte, hätte man mal in die OH gesehen denn in Delphi-Referenz durchsuchenGetEnumValue wird das verlinkt. :angle2:

Nunja, dass GetEnumName kenne ich ja auch nur das das nicht meine Frage betrifft.

Es ist schon ziemlich schwierig diese listen zu lesen, hab etwa 10 verschiedene davon (mehr geplant). Die Wörter in den Types haben eine bestimmte Reihenfolge, auch wen das nicht gleich ersichtlich ist.

Meine Procedure soll dann ermitteln, an welcher Stelle ein bestimmter String (in meinem Beispiel oben "rde") in jeder dieser Listen hat. So eine Art "IndexOf" eben. die listen stehen fest und sollen zur Laufzeit auch nicht verändert werden.

Hatte es Anfangs mit einer "Array of String" Constante versucht, auch das habe ich oben schon erwähnt. Aber da konnte ich den "IndexOf" nur mit einer längeren Schleife ermitteln.

Das mit dem Prefix hab ich auch schon ausprobiert und scheint wohl die beste Lösung zu sein...

Danke ...

Sir Rufo 13. Jun 2012 21:39

AW: Type und getEnumValue
 
Es würde sich auch ein TDictionary anbieten, dann hast du keine Probleme mit den Präfixen.
Und die Suche innerhalb sollte damit auch recht zügig sein.

himitsu 13. Jun 2012 21:41

AW: Type und getEnumValue
 
Delphi-Referenz durchsuchenIndexText
Delphi-Referenz durchsuchenIndexStr
Delphi-Referenz durchsuchenMatchText
Delphi-Referenz durchsuchenMatchStr

Zitat:

Aber da konnte ich den "IndexOf" nur mit einer längeren Schleife ermitteln.
Hier im Forum suchenTStrings.IndexOf macht auch nichts anderes, als die ganze Liste in einer Schleife durchzugehn und den String zu suchen. :roll:
Die Ausnahme sind sortierte Listen, HashMaps oder z.B. BTree's, wo optimaler gesucht werden kann.

Sir Rufo 13. Jun 2012 21:56

AW: Type und getEnumValue
 
Darum ja auch ein Delphi-Referenz durchsuchenTDictionary, weil das mit einer Hash-Liste arbeitet ;)


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