![]() |
Delphi-Version: 5
TGuid aus String erstellen
Jetzt mal eine (hoffentlich) ganz einfache Frage.
Geht das auch einfacher bzw. eleganter? Habe das an einigen Stellen im Programm
Delphi-Quellcode:
Ich bekomme über eine REST-Schnittstelle das TJSONObject. Die Übergabe sieht so aus: {"ServiceID":"00000000-0000-0000-0000-000000000001"} Andere Schreibweisen bringen einen Fehler.
var
MyJSONData : TJSONObject; LServiceID : TGuid; begin // ServiceID aus Parameter lesen // GEHT DAS VIELLEICHT EINFACHER? LServiceID := StringToGuid('{'+copy(MyJSONData.Values['ServiceID'].ToString,2,36)+'}'); MyJSONData.Values[].toString liefert dies: "00000000-0000-0000-0000-000000000001" Funktionieren tut es so. Danke |
AW: TGuid aus String erstellen
Viel einfacher geht es nicht, da der String formell kein GUID-Format hat:
Delphi-Quellcode:
LServiceID := TGUID.Create('{' + MyJSONData.Values['ServiceID'].AsType<string> + '}');
|
AW: TGuid aus String erstellen
Zitat:
Ansonsten wie Uwe schon sagte. |
AW: TGuid aus String erstellen
Hier meine Funktion dafür.
Kannn jetzt fast jeden String übergeben und er such die erste vorkommende Guid raus.
Delphi-Quellcode:
function DirtyStringToGuid( DirtyString: String): TGuid;
// sucht das erste "-" ab der 8. Position // testet damit eine mögliche Guid // falls nicht ok, dann lösche alle Zeichen bis zum '-' (einschl.) // rekursiver Aufruf // liefert bei Fehler eine Empty-Guid var s: String; p1: Integer; begin // 00000000-0000-0000-0000-000000000000 Result := TGuid.Empty; if Length( DirtyString) < 36 then exit; p1 := Pos('-', DirtyString, 8); s := copy( DirtyString, p1-8, 36); try Result := StringToGuid( '{'+s+'}'); except Result := DirtyStringToGuid( copy( DirtyString, p1+1, 9999)); end; end; |
AW: TGuid aus String erstellen
Ups, hatte sich ein Fehler beim kopieren eingeschlichen. Hatte noch den Delete-Befehl drin, anstatt den copy-Befehl.
Habe es korrigiert. |
AW: TGuid aus String erstellen
Die Alternative im except Teil wäre ein Delete-Befehl:
Delphi-Quellcode:
except
begin //Result := DirtyStringToGuid( copy( DirtyString, p1+1, 9999)); system.Delete( DirtyString, 1, p1); Result := DirtyStringToGuid( DirtyString); end; end; |
AW: TGuid aus String erstellen
Zitat:
Delphi-Quellcode:
GUID_NULL zurückgeben.
const
GUID_NULL: TGUID = '{00000000-0000-0000-0000-000000000000}'; |
AW: TGuid aus String erstellen
Im except-Teil steht aber der rekusive Aufruf. Da kann ich keine NULL-Guid zurückgeben.
|
AW: TGuid aus String erstellen
Zitat:
Aber persönlich würde ich den rekursiven Aufruf im Finally Block aufrufen und im except NULL-GUID zurück geben. Denn so wie du es hast gehst du Gefahr im Fehler Block eine Endlos Schleife zu generieren. Von Speicherlecks mal ganz abgesehen. |
AW: TGuid aus String erstellen
Warum überhaupt die Rekursion, ansttt einer Iteration? (Scheife in der Funktion)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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