Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Datenstruktur gesucht (https://www.delphipraxis.net/183910-datenstruktur-gesucht.html)

LokutusvB 13. Feb 2015 07:03

Delphi-Version: 5

Datenstruktur gesucht
 
Morgen,

folgende Ausgangssituation: Ich habe in einer Datenbank unter anderem pro Datensatz einen Buchstaben zwischen A und I. Diese Buchstaben stehen für 1 bis 9. An diesem System kann nichts geändert werden. Wenn ich den Buchstaben aus der Datenbank auslese, möchte ich direkt mit der dahinterverborgenen Zahl arbeiten.

Ich dachte, ein Type Enumeration sei genau das richtige für mich.

TAufzaehlung = (A = 1, B, C, D, E, F, G, H, I);

Und wenn ich die Informationen im Netz richtig verstehe, müßte mir

ta: TAufzaehlung;
...
ta.A eine 1 als Rückgabe liefern, oder? Aber genau das macht es nicht. Vermutlich verstehe ich die Verwendung einer solchen Enumeration völlig falsch. Welcher Datentyp ist für dieses kleine Problemchen besser geeignet? Klar, ich könnte in einer Case-Anweisung einfach A bis I "abfackeln", ich hätte das aber lieber eleganter gelöst.

Jumpy 13. Feb 2015 07:53

AW: Datenstruktur gesucht
 
Wie liest du die Buchstaben denn aus der Datenbank aus? Mit einer Query, wo du evtl. das SQL-Statement anpassen kannst? In Oracle z.B.
Code:
Select
  ASCII(Buchstabenfeld)-64 as BuchstabenNummer
A ~ ASCII 65, B ~ 66, usw. daher die "-64"

Oder eine analoge Funktion in Delphi implementieren und das dort beim auslesen "übersetzen".

LokutusvB 13. Feb 2015 08:06

AW: Datenstruktur gesucht
 
Es handelt sich nicht um eine SQL-Datenbank. Mit SQL-Statements komme ich nicht weiter. Es gibt nur Delphi-Funktionen für das Auslesen von Werten.

Der gesuchte Buchstabe ist in einem String versteckt. Wenn ich den String auslese, kann ich mir mit Copy den gewünschten Buchstaben ermitteln. Ab dieser Stelle fehlt mir nun noch der richtige Lösungsansatz.

franktron 13. Feb 2015 08:11

AW: Datenstruktur gesucht
 
Mach das doch so
Delphi-Quellcode:
Nr:=Chr(DatenbankFeld)-64;

Sir Rufo 13. Feb 2015 08:25

AW: Datenstruktur gesucht
 
Zitat:

Zitat von franktron (Beitrag 1289722)
Mach das doch so
Delphi-Quellcode:
Nr:=Chr(DatenbankFeld)-64;

Das ist einer dieser Ansätze, die immer ein riesen Geschrei erzeugen, wie z.B. bei der Umstellung auf Unicode. Eher durch Zufall wurde die Position von A nicht geändert, so dass dies davon nicht betroffen gewesen wäre.

Warum immer durch die Brust ins Auge? Ist die Information tatsächlich verbunden mit dem 64. Zeichen der aktuellen Zeichentabelle?

Irgendwie hatte ich gedacht, der Kontext wäre ein anderer? Da soll doch A => 1 bedeuten. Dann programmiert man das auch genau so und nicht über eine Annahme, die hoffentlich auch so bleibt und wir dies darum jeden Abend in unser Nachtgebet mit einschliessen.

Ich würde sogar so weit gehen und den echten Kontext (1 ist ja irgendwie nichtssagend) mit diesem A verknüpfen.

LokutusvB 13. Feb 2015 08:26

[GELÖST] AW: Datenstruktur gesucht
 
Danke für den richtigen Wink, franktron. :)

Code:
nr := ord(Buchstabe);
liefert mir genau das Ergebnis, das ich möchte. Oder gibt es noch Einwände, Sir Rufo?

mkinzler 13. Feb 2015 08:41

AW: Datenstruktur gesucht
 
Sollte es nicht besser:
Delphi-Quellcode:
nr := ord(Buchstabe)- ORD('A')+1;
heißen.

Denn sonst sollte 65 rauskommen.

LokutusvB 13. Feb 2015 08:56

AW: Datenstruktur gesucht
 
Ja, du hast Recht. Bei mir ist 1 bis 9 rausgekommen, da ich den Type Enumeration
Code:
TAufzaehlung = (A = 1, B, C, D, E, F, G, H, I);
noch im Quelltext stehen hatte. Danke für den Hinweis.

Sir Rufo 13. Feb 2015 09:06

AW: [GELÖST] AW: Datenstruktur gesucht
 
Zitat:

Zitat von LokutusvB (Beitrag 1289728)
Danke für den richtigen Wink, franktron. :)

Code:
nr := ord(Buchstabe);
liefert mir genau das Ergebnis, das ich möchte. Oder gibt es noch Einwände, Sir Rufo?

Mich befällt immer ein gewisses Unbehagen, wenn man den echten Kontext mit einem völlig anderen Kontext verknüpft um den echten Kontext daraus herzuleiten. Nun, so bleibt das Geschrei in Zukunft aber auch auf dem gleichen Level :mrgreen:

Siehe auch die Verwendung von
Delphi-Quellcode:
PChar
oder
Delphi-Quellcode:
integer
und das Geschrei bei Unicode bzw. 64bit.


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