Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi IsGUID? (https://www.delphipraxis.net/83160-isguid.html)

PeterPanino 28. Dez 2006 15:21


IsGUID?
 
Hallo,

kennt jemand eine Funktion, mit der man verlässlich feststellen kann, ob ein String eine GUID ist, die mit SysUtils.GUIDToString(SysUtils.CreateGUID) erzeugt wurde.

sakura 28. Dez 2006 15:23

Re: IsGUID?
 
Zitat:

Zitat von PeterPanino
kennt jemand eine Funktion, mit der man verlässlich feststellen kann, ob ein String eine GUID ist, die mit SysUtils.GUIDToString(SysUtils.CreateGUID) erzeugt wurde.

Eine solche Funktion kann es nicht geben, da die erzeugten nirgendwo gespeichert werden. Du kannst höchstens versuchen zu überprüfen, ob das Format korrekt ist.

...:cat:...

PeterPanino 28. Dez 2006 17:45

Re: IsGUID?
 
[quote="sakura"]
Zitat:

Zitat von PeterPanino
kennt jemand eine Funktion, mit der man verlässlich feststellen kann, ob ein String eine GUID ist, die mit SysUtils.GUIDToString(SysUtils.CreateGUID) erzeugt wurde.

Eine solche Funktion kann es nicht geben, da die erzeugten nirgendwo gespeichert werden. Du kannst höchstens versuchen zu überprüfen, ob das Format korrekt ist.

Ist eigentlich logisch, deswegen habe ich es nicht so gemeint. Da es ja mehrere GUID-Formate gibt, sollte eine Überprüfung stattfinden, ob der der String überhaupt eine GUID ist, bzw. ob der String eine GUID in diesem Format ist.

Freundliche Grüße und schöne Feiertage!

fLaSh11 28. Dez 2006 17:48

Re: IsGUID?
 
Falls du GUIDs brauchst, ich kenne einen VBS-Befehl zum kreieren jener. :angel2:

FriFra 28. Dez 2006 18:52

Re: IsGUID?
 
Zitat:

Zitat von fLaSh11
Falls du GUIDs brauchst, ich kenne einen VBS-Befehl zum kreieren jener. :angel2:

http://www.jedidjah.dds.nl/Alphabet/SesameL/Lefty.jpg
Hey Du... Ja du... willst Du ein G kaufen? Ich hab da'n Tip.. drück einfach Strg+Shift+G in der IDE ;)

Die Schweizer haben dafür auch einen Tip für Delphi: http://www.swissdelphicenter.ch/de/showcode.php?id=1172


@Topic
Eine GUID sieht ja wie folgt aus: {4F65CB3B-3CE3-4CB8-8D98-DB1BE875F92B}

Prüfe also, ob die GUID von { } eingeschlossen ist und insgesamt (inkl. { und } ) 38 Zeichen lang ist.
Dann prüfst Du, ob an Pos 10, 15, 20 und 25 ein - steht und der Rest zwischen 0 und F liegt (Hex 0-15) ;)

Vorschlag
Delphi-Quellcode:
function IsGUID(aString: string): boolean;
  function ChkSub(aString: string; iStart, iEnd: integer): boolean;
  var
    n: integer;
  begin
    Result := True;
    for n := iStart to iEnd do
      if aString[n] in ['0'..'9', 'A'..'F'] then
      else
      begin
        Result := False;
        break;
      end;
  end;
begin
  Result := (Length(aString) = 38) and (aString[1] = '{') and (aString[10] = '-')
    and (aString[15] = '-') and (aString[20] = '-') and (aString[25] = '-') and
    (aString[38] = '}') and ChkSub(aString, 2, 9) and ChkSub(aString, 11, 14)
    and ChkSub(aString, 16, 19) and ChkSub(aString, 21, 24) and ChkSub(aString,
    26, 37);
end;

PeterPanino 29. Dez 2006 01:36

Re: IsGUID?
 
Danke für die Funktion. Wer kennt sich mit regulären Ausdrücken aus und kann eine GUID als regulärer Ausdruck darstellen?

Dax 29. Dez 2006 01:56

Re: IsGUID?
 
Ich glaube,
Code:
\{[0-9A-F]{8}(-[0-9A-F]{4}){3}-[0-9A-F]{8}\}
müsste es tun..

Hawkeye219 29. Dez 2006 09:04

Re: IsGUID?
 
Hallo,

ohne reguläre Ausdrücke könnte man so prüfen:

Delphi-Quellcode:
function CLSIDFromString (psz: PWideChar; out clsid: TGUID): HResult; stdcall;
  external 'ole32.dll' name 'CLSIDFromString';

function IsValidGUID (const aString: WideString): Boolean;
var
  Dummy : TGUID;
begin
  Result := Succeeded(CLSIDFromString(PWideChar(aString), Dummy));
end;
Gruß Hawkeye

Olli 30. Dez 2006 23:25

Re: IsGUID?
 
Zitat:

Zitat von Dax
Ich glaube,
Code:
\{[0-9A-F]{8}(-[0-9A-F]{4}){3}-[0-9A-F]{8}\}
müsste es tun..

Ist das absichtlich eine Gruppe zum Einfangen des Ergebnisses? Und sollte die Gegenfrage nicht allgemein erstmal lauten welche RE-Syntax er braucht ;) ... schließlich benutzt nicht jeder PCRE.

PeterPanino 31. Dez 2006 17:15

Re: IsGUID?
 
Zitat:

Zitat von Hawkeye219
Hallo,

ohne reguläre Ausdrücke könnte man so prüfen:

Delphi-Quellcode:
function CLSIDFromString (psz: PWideChar; out clsid: TGUID): HResult; stdcall;
  external 'ole32.dll' name 'CLSIDFromString';

function IsValidGUID (const aString: WideString): Boolean;
var
  Dummy : TGUID;
begin
  Result := Succeeded(CLSIDFromString(PWideChar(aString), Dummy));
end;
Gruß Hawkeye

Die GUID (wenn es denn eine sein sollte) stammt nicht aus einem COM-Interface, sondern wurde (wie oben angegeben) mit SysUtils.GUIDToString(SysUtils.CreateGUID) erzeugt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.
Seite 1 von 2  1 2      

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