Seite 1 von 1

Schleifenbedingungen greift nicht.

Verfasst: 10.03.2010 16:07
von alen
Hallo Zusammen,

ich versuche mit diesem Stück Code und der Hilfe des Includes "Registry.pbi" von jaPBe einen Teil der Registry auszulesen. Dabei schaue ich ich jeden Zweig hinein und will nur den "DisplayName" jedes Stranges ermitteln.

Das klappt auch soweit aber meine Schleifenbedingung greift nicht und die Routine schiesst über das Ende hinaus. Ich würde gerne solange auslesen bis kein Inhalt mehr aus der Variable "value" mehr kommt.

Code: Alles auswählen

  Repeat
    Index.b + 1
    key.S   = Reg_ListSubKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", Index, "")
    value.S = Reg_GetValue(#HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"+key, "DisplayName", "")
    
    If value <> "": msg.S + Str(Index) + " - " + value + Chr(10): EndIf
  Until value = ""
  
 MessageRequester("Output", msg)
Vielleicht hat jemand eine Idee wie es besser geht.

Frage ich nach "Until Index = 100" z.B. ab bekomme ich auch Ergebnisse und es geht nicht in die Endlosschleife.
Hilfe ! Bin doch nur ein dummer Scripter von PHP, Python.

Danke im Voraus.
Grüße
Alen

Re: Schleifenbedingungen greift nicht.

Verfasst: 10.03.2010 16:13
von STARGÅTE
schiebe doch mal ein Debug mit in die schleife damit du siehst was überhaupt in "value" drin steht.

Vllt wird auch ein Leerzeichen übergeben oder so, also am besten noch n TRIM mit rein

Code: Alles auswählen


Repeat
    Index.b + 1
    key.S   = Reg_ListSubKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", Index, "")
    value.S = Reg_GetValue(#HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"+key, "DisplayName", "")
    
    If value <> "": msg.S + Str(Index) + " - " + value + Chr(10): EndIf
    Debug value
  Until Trim(value) = ""
Kann leider nix näheres zu den Funktionen selber sagen!

Re: Schleifenbedingungen greift nicht.

Verfasst: 10.03.2010 16:42
von ts-soft
Mit Index.b sparste keinen Speicher, Du verlangsamst nur das Programm. In diesem Fall könnte es sogar
das Problem sein, da Index ja irgendwann über 255 erreichen wird.
Bytetypen ausserhalb von Strukturen sind nur sehr, sehr selten sinnvoll. Nutze Integer für alles.

Gruß
Thomas

Re: Schleifenbedingungen greift nicht.

Verfasst: 10.03.2010 16:48
von alDo
Warum sind Bytetypen ausserhalb von Strukuren nur selten sinnvoll? Ausserdem ist .b doch signed und somit erfolgt der Überlauf bereits bei 127.

Gruss alDo

Re: Schleifenbedingungen greift nicht.

Verfasst: 10.03.2010 16:57
von STARGÅTE
weil es die CPU mit Bytes langsammer rechnet als mit Integers, denn die Bytes werden erst auf Integers aufgefüllt und wieder zurück gewandelt, wenn man mit ihnen rechnet.

Wenn man ein großen Array hat (2 oder 3 dimensional) dann sollte man wirklich genau gucken, weil es dann um größere Meichermengen geht, aber bei einer Lauf-Variable ist es quatsch Bytes zu nutzen.

Re: Schleifenbedingungen greift nicht.

Verfasst: 10.03.2010 17:10
von ts-soft
alDo hat geschrieben:Ausserdem ist .b doch signed und somit erfolgt der Überlauf bereits bei 127.

Gruss alDo
Dann guck mal genau in die Hilfe. Erst bei 256 erfolgt der Überlauf! Im Speicher sieht ein
signed oder unsigned gleich aus. PB läßt Werte bis 255 zu, damit man diese dann Maskiert
(& $FF) nutzen kann.

Bytes in einer Strukture liegen wirklich hintereinander. Einzelne Bytes liegen verteilt im Speicher,
und mit großer Wahrscheinlichkeit sind nach jedem Byte im Speicher 3 Bytes ungenutzt :mrgreen:

Beim nativem Typ (Integer) kann jeder Rechenvorgang mit weniger calls ausgeführt werden.
Also für Zähler, Boolean usw. am besten immer Integer nutzen, alles andere wirkt sich nur
negativ aus.

Gruß
Thomas