Seite 1 von 1

Funktion zur Prüfung ob eine Variable existiert

Verfasst: Di, 20. Feb 2024 10:55
von klammerauf
Gibt es eine Möglichkeit zu prüfen, ob eine Variable existiert, ohne über BEGIN SEQUENCE zu gehen?

Also eine Funktion z.B. VarExists("xVar") liefert TRUE/FALSE

Re: Funktion zur Prüfung ob eine Variable existiert

Verfasst: Di, 20. Feb 2024 11:19
von Tom
Type("cVarName") ermittelt, ob eine Variable <cVarName> als PUBLIC oder PRIVATE existiert. Wenn Type("cMeinDatum") als Antwort "U" liefert, existiert die Variable "cMeinDatum" als PRIVATE oder PUBLIC nicht. Mit ValType(cMeinDatum) (Achtung: ohne Anführungszeichen) bestimmst Du den Typ einer STATIC oder LOCAL, aber das scheitert, wenn es "cMeinDatum" überhaupt nicht gibt. Das kannst Du umgehen, indem Du "IF cMeinDatum == NIL" abfragst. Wenn das .T., liefert, existiert die Variable entweder nicht oder sie ist tatsächlich NIL, wobei dann keine Rolle spielte, ob als PRIVATE, PUBLIC oder LOCAL (aber es könnte dann sein, dass Du sie als LOCAL definiert hast, ohne sie zu typisieren bzw. ihr einen Initialwert zuzuordnen). Mit der Funktion SymbolInfo() kannst Du Dir eine Liste aller PRIVATEs und PUBLICs holen.

Re: Funktion zur Prüfung ob eine Variable existiert

Verfasst: Di, 20. Feb 2024 12:16
von brandelh
diese Funktion würde einen Quellcode Namen der Variable benötigen, diesen gibt es für MEMVARS,
nicht aber für LOCAL oder STATIC da sind das nur noch Speicheradressen (ohne Debugging Code).

Aus diesem Grunde muss man sich wohl sowas basteln.

Re: Funktion zur Prüfung ob eine Variable existiert

Verfasst: Di, 20. Feb 2024 12:59
von Jan
PUBLICs und PRIVATEs checke ich per isMemvar(). Was aber nur prüft ob die existiert, nicht ob die auch einen Wert hat.

Jan

Re: Funktion zur Prüfung ob eine Variable existiert

Verfasst: Di, 20. Feb 2024 13:57
von Tom
Es gibt zig Wege.

Ob aber eine LOCAL deklariert wurde, ohne dass eine Initialisierung vorgenommen wurde, lässt sich nur in einer SEQUENCE feststellen.