Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   POS liefert bei Registry-String immer Null (https://www.delphipraxis.net/153761-pos-liefert-bei-registry-string-immer-null.html)

NooL 15. Aug 2010 10:03

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 !!!

daywalker9 15. Aug 2010 10:06

AW: POS liefert bei Registry-String immer Null
 
Liefert bei mir sauber 32 zurück. Zeig mal dein Sourcecode

himitsu 15. Aug 2010 10:26

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?

NooL 15. Aug 2010 10:53

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:
    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;
Zur Kontrolle gebe ich den SubStr DrvName in einer ListBOX aus.
Dort wird der Inhalt von DrvName mit '00HLFS-01G6U0' korrekt angezeigt.

Den SuchString hole ich mir aus der Registry.

Delphi-Quellcode:
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OPenKey('SYSTEM\CurrentControlSet\Services\Disk\Enum',false);
s:=reg.ReadString('6');
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.

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.

NooL 15. Aug 2010 11:09

AW: POS liefert bei Registry-String immer Null
 
Habe mal in der Zeit das ausprobiert:
Delphi-Quellcode:
Pos('00HLFS-01G6U0','USBSTOR\Disk&Ven_WDC_WD30&Prod_00HLFS-01G6U0&Rev_4V01\D57860C59536&0');
Da meldet POS korrekt 32 zurück.

Auch wenn ich es direkt so angebe:

Delphi-Quellcode:
  DrvName:='00HLFS-01G6U0';
  S:='USBSTOR\Disk&Ven_WDC_WD30&Prod_00HLFS-01G6U0&Rev_4V01\D57860C59536&0';
  Pos(DrvName,S);
Sorry hatte falsche Variable verwendet -> meldet POS auch 32 !

Sobald aber einer der Variablen der Wert per Funktion übergeben wird, meldet Pos 0 !

NooL 15. Aug 2010 12:47

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ß !

himitsu 15. Aug 2010 13:08

AW: POS liefert bei Registry-String immer Null
 
Das nächste Mal einfach im Debugger nachsehn.
Selbst D5 sollte da schon was bieten.

Christian Seehase 15. Aug 2010 16:31

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.

rollstuhlfahrer 15. Aug 2010 21:12

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 Delphi-Referenz durchsuchenAnsiContainsText oder (mit Groß/Kleinschreibung) Delphi-Referenz durchsuchenAnsoContainsStr vorschlagen.

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz