Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Typ in String umwandeln (https://www.delphipraxis.net/114691-typ-string-umwandeln.html)

Baeuerle 29. Mai 2008 15:16


Typ in String umwandeln
 
hallo,

ich habe folgenden typ und möchte diesen nun in einen string konvertieren (OHNE case) damit ich diesen in eine XML Datei schreiben kann.

Und wie lese ich das wieder aus wenn ich einen String habe der x den entsprechenden Wert zuweisen soll???

Delphi-Quellcode:
TFilterKinds =
    (ftNone, ftInclusive, ftExclusive);

var x: TFilterKinds;
// so soll es nicht sein da zu viel code
case x of
 ftnone:      Write('bla');
 ftInclusive: Write('bla 1');
 ftExclusive: Write('bla 2');
 end;
// So irgendwie dachte ich mir das
write(x);
thx

FAlter 29. Mai 2008 15:20

Re: Typ in String umwandeln
 
Hi,

die Umwandlung geht auch über eine Array-Konstante. Zurück wirds wohl nur über If-Then gehen.

Delphi-Quellcode:
type
  TMyType = (myA, myB, myC);

const
  MyTypeToStr: array[myA..myC] of String = ('myA', 'myB', 'myC');

var
  X: TMyType;

...

write(MyTypeToStr[X]));
Mfg
FAlter

Baeuerle 29. Mai 2008 15:22

Re: Typ in String umwandeln
 
warum geht das ganze z.b. mit IXMLNode.NodeValue = OleVariant

Die kann beliebige werte annehmen und auch wieder zuweisen

Neutral General 29. Mai 2008 15:28

Re: Typ in String umwandeln
 
Hi,

Ich glaube du kannst diese Strings mit der RTTI herausbekommen. Wie genau, weiß ich aber auch nicht auswendig.

Gruß
Neutral General

Apollonius 29. Mai 2008 15:32

Re: Typ in String umwandeln
 
In diesem Fall ist die Unit TypInfo dein Freund, insbesondere die Funktionen GetEnumName und GetEnumValue.

rollstuhlfahrer 29. Mai 2008 15:48

Re: Typ in String umwandeln
 
HI,

ansonsten kannst du den aktuellen Wert mit Ord() erhalten. Wie du aus dem Integer wieder deinen Typ bekommst, weiß ich nicht. Das kannst du aber mit Case oder Inc/Dec versuchen.

Bernhard

FAlter 29. Mai 2008 15:51

Re: Typ in String umwandeln
 
Hi,

Zitat:

Zitat von rollstuhlfahrer
Wie du aus dem Integer wieder deinen Typ bekommst, weiß ich nicht.

Einfach ein Typecast. Größe beachten! Ord nimmt einem diese Arbeit ab, entspricht Typecast nach Byte/Word/Integer, je nach Größe des Typs.

Mfg
FAlter

Neutral General 29. Mai 2008 15:55

Re: Typ in String umwandeln
 
Zitat:

Zitat von FAlter
Hi,

Zitat:

Zitat von rollstuhlfahrer
Wie du aus dem Integer wieder deinen Typ bekommst, weiß ich nicht.

Einfach ein Typecast. Größe beachten! Ord nimmt einem diese Arbeit ab, entspricht Typecast nach Byte/Word/Integer, je nach Größe des Typs.

Mfg
FAlter

Wenn ich mich richtig entsinne sind alle ordinalen Typen nur ein Byte groß. Von daher weiß ich nicht warum Ord irgendwann ein Word oder einen Integer zurückgeben sollte ;)

Muetze1 29. Mai 2008 15:58

Re: Typ in String umwandeln
 
Zitat:

Zitat von Neutral General
Wenn ich mich richtig entsinne sind alle ordinalen Typen nur ein Byte groß. Von daher weiß ich nicht warum Ord irgendwann ein Word oder einen Integer zurückgeben sollte ;)

Nein, Aufzählungen sind bei Delphi so groß wie nötig, können auch grösser werden. Diese Eigenart ist vor allem bei Mischprojekten in den Studios (BDS, RAD) wichtig, da dort dies zu Problemen führt. Daher gibt es dort explizit die Einstellungen der Enum-Größen in den Delphi Compileroptionen (bzw. $Z1, $Z2, $Z4).

FAlter 29. Mai 2008 15:59

Re: Typ in String umwandeln
 
Hi,

wenn der Typ mehr als 256 verschiedene Elemente beinhaltet, ist er größer als ein Byte. Das ist allerdings äußerst selten der Fall.

Bei Mengen (set) reichen dagegen schon mehr als acht Elemente. Das kommt öfters vor.

Mfg
FAlter

Neutral General 29. Mai 2008 16:05

Re: Typ in String umwandeln
 
:gruebel:

Also bei mir meckert der Compiler wenn ich z.B. sowas wie

Delphi-Quellcode:
TTest = Set of Word;
schreibe...

Habe aber auch Delphi7.. Vielleicht hängts daran...

Gruß
Neutral General

Muetze1 29. Mai 2008 16:08

Re: Typ in String umwandeln
 
Ein Set kann maximal 64 Elemente haben, da er maximal 8 Bytes gross sein kann. Ansonsten habe ich, FAlter und der Threadersteller von Aufzählungen geschrieben.

Neutral General 29. Mai 2008 16:10

Re: Typ in String umwandeln
 
Oh ja ich hatte mich gerade vertan -.- Hatte irgendwie was falsches im Kopf...

Codewalker 15. Nov 2009 20:24

Re: Typ in String umwandeln
 
Zitat:

Zitat von Apollonius
In diesem Fall ist die Unit TypInfo dein Freund, insbesondere die Funktionen GetEnumName und GetEnumValue.

Nette Idee, aber scheinbar haben Enums keine TypInformationen :shock:
Mein Code:
Delphi-Quellcode:
  TValueType = (vtTemperature = 1, vtHumidity = 2);

{ ... }
  Assert(False, 'Cannot return value of type' + GetEnumName(System.TypeInfo(TValueType), Ord(ValueType)));
Der Compiler mosert: [DCC Fehler] SimDevice.pas(50): E2134 Typ 'TValueType' besitzt keine Typinformation

Hat jemand eine Idee woran es liegen könnte?

Apollonius 15. Nov 2009 20:33

Re: Typ in String umwandeln
 
Das ist kürzlich mal bei Stackoverflow aufgetaucht. Wenn du explizit Integer-Werte vergibst, mag der Compiler keine Typinformation mehr generieren. Sehr lästig.

Codewalker 15. Nov 2009 20:35

Re: Typ in String umwandeln
 
Danke, das hätte ich niemals gefunden :thumb: . Auf die konkreten Werte kann ich in diesem Fall verzichten ... ist aber trotzdem mehr als ärgerlich.

himitsu 15. Nov 2009 21:19

Re: Typ in String umwandeln
 
Dieses Problem ist auch hier schon länger bekannt.

http://www.delphipraxis.net/internal...090825#1090825
(einer der Threads)

und auch die neue RTTI von D2010 hat immernoch dieses "Problem" :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz