Schleifenbedingungen greift nicht.

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Schleifenbedingungen greift nicht.

Beitrag 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
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Schleifenbedingungen greift nicht.

Beitrag 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!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Schleifenbedingungen greift nicht.

Beitrag 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
alDo
Beiträge: 41
Registriert: 28.01.2010 16:50
Wohnort: Hannover

Re: Schleifenbedingungen greift nicht.

Beitrag 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
OS: Windows XP
PB: 4.40 (x86)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Schleifenbedingungen greift nicht.

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Schleifenbedingungen greift nicht.

Beitrag 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
Antworten