Convert Variant to String

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Convert Variant to String

Beitrag von hde »

Hallo,
hat Jemand von Euch eine Idee, wie ich ein Variant oder OleVariant in String convertieren kann?

Grund: Ich übernehme selektierte Texte aus MS-Word, was offenbar nur in Variant oder OleVariant auch gut funktioniert, muss das Zeug aber irgendwie bearbeiten bevor ich es wieder einfüge.

wäre nett, wenn Jemand eine Idee hätte.

Gruß hde

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Convert Variant to String

Beitrag von mse »

Code: Alles auswählen

stringvariable:= variantwert;

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

Sorry mse,
alle Konvertierungs- und Zuweisungsversuche scheitern bisher an "Invalid Variant Cast" o.ä.
Gruß hde

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

Re: Convert Variant to String

Beitrag von theo »

Bis du sicher, dass die Variante etwas gültiges enthält?

Check doch mal mit VarType(v) was da drin ist.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

kann der fpc 2.6.0 das? Ich krieg nur .. Eror: Identifier not found "VarType"
oder was fehlt/mach ich falsch?
hde

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

Re: Convert Variant to String

Beitrag von theo »

hde hat geschrieben:kann der fpc 2.6.0 das? Ich krieg nur .. Eror: Identifier not found "VarType"
Ist seit etwa 7 Jahren in der unit "variants".
oder was fehlt/mach ich falsch?
Hirn eingeschaltet? :wink:

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

sorry @theo, und danke ..
ich hatte überlegt welche unit fehlt, aber aln Lazarus versuche ich mich erst seit kürzerem.
ja, es ist was drin und z war VarTyoe 9
hde

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

Re: Convert Variant to String

Beitrag von theo »

Das wär dann wohl VarDispatch.

http://docs.embarcadero.com/products/ra ... patch.html" onclick="window.open(this.href);return false;
http://docs.embarcadero.com/products/ra ... rType.html" onclick="window.open(this.href);return false;

Da kenne ich mich aber auch nicht mit aus.

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Convert Variant to String

Beitrag von gocher »

Ich würde es so angehen, so in der Art habe ich es zumindest in meiner ADO Komponente im Einsatz.

Code: Alles auswählen

type TDataType = (dtEmpty, dtTinyInt, dtSmallInt, dtInteger, dtBigInt, dtUnsignedTinyInt,
        dtUnsignedSmallInt, dtUnsignedInt, dtUnsignedBigInt, dtSingle, dtDouble,
        dtCurrency, dtDecimal, dtNumeric, dtBoolean, dtError, dtUserDefined,
        dtVariant, dtIDispatch, dtIUnknown, dtGUID, dtDate, dtDBDate, dtDBTime,
        dtDBTimeStamp, dtBSTR, dtChar, dtVarChar, dtLongVarChar, dtWChar,
        dtVarWChar, dtLongVarWChar, dtBinary, dtVarBinary, dtLongVarBinary,
        dtChapter, dtFileTime, dtDBFileTime, dtPropVariant, dtVarNumeric, dtArray);
 
const DataTypeValues: array[TDataType] of TOleEnum = (
        adEmpty, adTinyInt, adSmallInt, adInteger, adBigInt, adUnsignedTinyInt,
        adUnsignedSmallInt, adUnsignedInt, adUnsignedBigInt, adSingle, adDouble,
        adCurrency, adDecimal, adNumeric, adBoolean, adError, adUserDefined,
        adVariant, adIDispatch, adIUnknown, adGUID, adDate, adDBDate, adDBTime,
        adDBTimeStamp, adBSTR, adChar, adVarChar, adLongVarChar, adWChar,
        adVarWChar, adLongVarWChar, adBinary, adVarBinary, adLongVarBinary,
        adChapter, adFileTime, adDBFileTime, adPropVariant, adVarNumeric, adArray);
 
function OleEnumToOrd(OleEnumArray: array of TOleEnum; Value: TOleEnum): Integer;
begin
  for Result := Low(OleEnumArray) to High(OleEnumArray) do
    if Value = OleEnumArray[Result] then Exit;
  Result := High(OleEnumArray) + 1;
end;  
 
function VariantToString(AValue: OleVariant): string;
begin
  result := '';
  try
      if TVarData(AValue).vType<>varNull then
        case TDataType(OleEnumToOrd(DataTypeValues,TVarData(AValue).vType)); of
        dtBoolean:
          if AValue then
            result := 'true'
          else
            result := 'false';
        dtDate, dtDBDate, dtDBTime, dtDBTimeStamp:
          result := FormatDateTime('dd"."mm"."yyyy hh":"nn":"ss', AValue);
        dtTinyInt, dtSmallInt, dtInteger, dtBigInt, dtUnsignedTinyInt, dtUnsignedSmallInt, dtUnsignedInt, dtUnsignedBigInt:
          result := VarToWideStrDef(AValue, '0');
        dtSingle, dtDouble, dtCurrency, dtDecimal, dtNumeric:
          result := FormatFloat('###0.##', AValue);
        else
          result := VarToWideStrDef(AValue, '');
        end;
  except
    WriteLog(etError, 'shit happens  :shock: ');
  end;  
end;
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

Danke @gocher,
ich werde es ausprobieren, muss nur mal suchen aus welcher unit TOleEnum stammt.
Gruß hde

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Convert Variant to String

Beitrag von gocher »

Unit ActiveX;
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

danke @gocher

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Convert Variant to String

Beitrag von marcov »

Variantto*string gibst schon predefinieert in varutils?

function VariantToWideString(const VargSrc : TVarData) : WideString;
function VariantToAnsiString(const VargSrc : TVarData) : AnsiString;
function VariantToShortString(const VargSrc : TVarData) : ShortString;

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Convert Variant to String

Beitrag von hde »

danke @marcov,
nur .. wie kriege ich ein Variant oder OleVariant umgewandelt in Tvardata ohne "Invalid variant type cast" ??
hde

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

Re: Convert Variant to String

Beitrag von theo »

Vllt wäre es hilfreich, wenn du mal zeigen würdest wie du zu deiner Variante kommst, die dann VarDispatch enthält.

Antworten