case mit strings?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

case mit strings?

Beitrag von knight »

Hallo,

ich stehe vor dem Problem, den Inhalt eines Eingabefeldes auswerten zu müssen. Das wäre eigentlich ein Fall für die case Anweisung, wenn diese denn mit Strings funktionieren würde. Da das Eingabefeld sowohl Buchstaben als auch Zahlen enthalten kann, scheidet eine Umwandlung a la StrToInt aus. Wegen der Vielzahl der Eingabemöglichkeiten ist ein Ungetüm aus unzähligen if ... then ... else auch nicht angebracht.
Fallen euch noch andere Alternativen ein (die nach Möglichkeit ohne zusätzliche Komponenten funktionieren sollen)?

knight

Benutzeravatar
theo
Beiträge: 11010
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Du könntest allen Fällen eine Integer-Konstante zuweisen, dann ein Array von TIdentMapEntry erstellen und mit IdentToInt abfragen. Dann mit der Integer-Konstante Casen. Mach ich so für einen HTML Parser.
TIdentMapEntry und IdentToInt sind in der unit Classes definiert.

Bsp:

Code: Alles auswählen

const
  Tags: array[0..108] of TIdentMapEntry = (
    (Value: TG_BR; Name: 'BR'),
    (Value: TG_P; Name: 'P'),
    (Value: TG_B; Name: 'B'),
    (Value: TG_I; Name: 'I'),
    (Value: TG_DIV; Name: 'DIV'),       
...

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Da findest Du im Internet zig Lösungen :)

Ich habe sogar einen Preprozessor gesehen, der die case-Syntax mit Strings ermöglicht und automatisch entsprechenden Code baut.


-Michael

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Ich finde die Idee von Theo nicht schlecht. Für meine Zwecke kann ich das vielleicht noch etwas einfacher gestalten. Danke für die Tips.

knight

Antworten