![]() |
POS liefert bei Registry-String immer Null
Hallo,
benötige mal Eure Hilfe. Versuche mit Pos(SubStr,SuchString) den SubStr = '00HLFS-01G6U0' im SuchString = 'USBSTOR\Disk&Ven_WDC_WD30&Prod_00HLFS-01G6U0&Rev_4V01\D57860C59536&0' zu finden. Den SubStr bekomme ich über eine Funktion geliefert und ist ein Teil eines Festplatten-Namens und wird in einem normalen String gespeichert. Der SuchString wird aus der Registry ausgelesen und auch in einen normalen String gespeichert. Jedoch liefert Pos immer 0 und müßte eigentlich 32 o.ä. liefern! Kann mir das momentan absolut nicht erklären. Hat jemand einen Tip ?????? Danke im Voraus !!! |
AW: POS liefert bei Registry-String immer Null
Liefert bei mir sauber 32 zurück. Zeig mal dein Sourcecode
|
AW: POS liefert bei Registry-String immer Null
Jupp, wo der String herkommt ist egal.
Also bist du dir ganz sicher, daß die gewünschten Strings auch wirklich so aussehn, wenn sie an Pos übergeben werden? |
AW: POS liefert bei Registry-String immer Null
Also, ich arbeite mit Delphi 5. Ich weiß nicht, ob das etwas zu sagen hat ?
Der Code mal ganz einfach dargestellt: Den SubStr bekomme ich über:
Delphi-Quellcode:
Zur Kontrolle gebe ich den SubStr DrvName in einer ListBOX aus.
BufStr : Array[0..39] of char;
reg : TRegistry; DrvName : String; DeviceIoControl(r, IOCTL_STORAGE_QUERY_PROPERTY , @query, SizeOf(query), @buffer, sizeof(buffer), dwBytesReturned, nil ); j := 0; for i := 0 to 39 do begin if buffer[i] = #0 then break; if buffer[i] >= ' ' then begin BufStr[j] := buffer[i]; inc(j); end; end; DrvName:=BufStr; Dort wird der Inhalt von DrvName mit '00HLFS-01G6U0' korrekt angezeigt. Den SuchString hole ich mir aus der Registry.
Delphi-Quellcode:
Die 6 ist momentan zum testen fest vergeben -> an dieser Stelle steht der Suchstring bei mir in der Registry -> wird aber später automatisch gesucht.
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE; reg.OPenKey('SYSTEM\CurrentControlSet\Services\Disk\Enum',false); s:=reg.ReadString('6'); Zur Kontrolle gebe ich den SuchStr S wieder in einer ListBOX aus. Dort wird der Inhalt von S mit 'USBSTOR\Disk&Ven_WDC_WD30&Prod_00HLFS-01G6U0&Rev_4V01\D57860C59536&0' korrekt angezeigt. Jedoch bringt Pos(DrvName,s) bei mir immer 0 ! Komisch ??? Mein Ziel ist es, den Namen eine Festplatte (hier als TeilString DrvName) in der Registry eindeutig der dortigen Count-Variable zuzuordnen. |
AW: POS liefert bei Registry-String immer Null
Habe mal in der Zeit das ausprobiert:
Delphi-Quellcode:
Da meldet POS korrekt 32 zurück.
Pos('00HLFS-01G6U0','USBSTOR\Disk&Ven_WDC_WD30&Prod_00HLFS-01G6U0&Rev_4V01\D57860C59536&0');
Auch wenn ich es direkt so angebe:
Delphi-Quellcode:
Sorry hatte falsche Variable verwendet -> meldet POS auch 32 !
DrvName:='00HLFS-01G6U0';
S:='USBSTOR\Disk&Ven_WDC_WD30&Prod_00HLFS-01G6U0&Rev_4V01\D57860C59536&0'; Pos(DrvName,S); Sobald aber einer der Variablen der Wert per Funktion übergeben wird, meldet Pos 0 ! |
AW: POS liefert bei Registry-String immer Null
Manchmal ist man einfach blind.
Habe in der ListBOX und im Label nicht gesehen, dass dem Wert DrvName noch Leerzeichen angehängt wurden. Die Funktion TrimRight(DrvNum) hat nun das Problem gelöst. Sorry und Gruß ! |
AW: POS liefert bei Registry-String immer Null
Das nächste Mal einfach im Debugger nachsehn.
Selbst D5 sollte da schon was bieten. |
AW: POS liefert bei Registry-String immer Null
Moin NooL,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Ausser eventuell vorhandenen Leer-/Steuerzeichen, kann Dir bei Pos auch die Gross-/Kleinschreibung einen Strich durch die Rechnung machen. |
AW: POS liefert bei Registry-String immer Null
Wenn alle schon nette Tipps am hinterherwerfen sind: Hier mal meiner:
Wenn es dir nur darum geht ob der Suchtext im String enthalten ist (ohne Groß/Kleinschreibung) würde ich ![]() ![]() Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 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