Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Convert von string to TConvType


ardely - Mi 24.06.09 20:59
Titel: Convert von string to TConvType
Hallo,
Wie kann ich die entsprechende Nummer vom z.b duMeters erhalten.

mein problem lautet: ich leite in einen string sBase:= 'duMeters' und möchte gern die entsprechende nummer erhalten.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Function GetConvert(sBase:string):double;
var
  TFromA   : TConvType;
  TToB     : TConvType;
begin
   TFromA  := sBase; // das fonctionniert hier nicht!!!
   TToB    := duKilometers;
...
result :=  convert(aValue,TFromA  ,TToB  )
end;


Welche Lösung können sie mir Vorschlagen, vielen Dank im voraus.


jaenicke - Mi 24.06.09 21:22

Da gibt es nichts Fertiges. Auch via RTTI wird das wohl nicht gehen (auch wenn ich da die Details nicht so gut kenne).

Vorschlag: (// EDIT: ungeeignet)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
type
  TConvType = (duNone, duKilometers, duMeters);

function StrToConvType(AValue: String): TConvType;
const
  ConvTypeStrings: array[TConvType] of String = ('duNone''duKilometers',
    'duMeters');
var
  i: TConvType;
begin
  Result := duNone;
  for i := Low(TConvType) to High(TConvType) do
    if ConvTypeStrings[i] = AValue then
    begin
      Result := i;
      Break;
    end;
end;


ardely - Mi 24.06.09 21:56

Sehr vielen dank für deine schnelle Antwort.

Ich bekomme einen Fehler wie dieses
'E2072 Number of elements (3) differs from declaration (65536)'

muss ich im array[TConvType], 65536 string definieren...

Delphi-Quelltext
1:
ConvTypeStrings: array[TConvType] of String = ('duNone''duKilometers''duMeters');                    

Danke

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - Mi 24.06.09 22:06

Jetzt habe ich mir das erst genauer angeschaut, es gibt bereits StrToConvUnit und DescriptionToConvType in der Unit ConvUtils, ebenso die umgekehrte Richtung. Ausprobiert habe ich das nicht, aber dem Quelltext nach sollte das das richtige sein.

(Ich kannte TConvType nicht weiter und war daher von einem normalen "kleinen" Typ ausgegangen, aber bei der Vielzahl der Werte und der Definition als normale Zahl geht das so wie ich oben angedacht hatte gar nicht sinnvoll.)