Code: Alles auswählen
// PARAMETERS Beispiel
// Das Beispiel demonstriert, wie sich LOCAL Variablen auch in einer
// .XPF-Datei für Speichervariablen sichern und wieder einlesen
// lassen. Dazu sind zwei benutzerdefinierte Befehle mit der
// #command-Direktive formuliert, die vom Präprozessor zu einem Aufruf
// der Prozeduren SaveLocal() oder RestLocal() übersetzt werden.
// In beiden Prozeduren sind die formalen Parameter mit PARAMETERS
// deklariert. Sie gehören damit der Speicherklasse PRIVATE an, die
// mit dem Befehl SAVE oder RESTORE gesichert und wieder eingelesen
// werden können.
// Bei SaveLocal() werden den Parametern die Werte von LOCAL-
// Variablen zugewiesen und die Parameter werden gespeichert.
// Bei RestLocal() werden die LOCAL-Variablen per Referenz übergeben.
// Dadurch wird ihnen der Wert der eingelesenen PRIVATE-Variablen
// (gesicherte Parameter) zugewiesen.
// Wenn man die Parameterlisten von SaveLocal() und Restlocal()
// verlängert, können mehr als nur 10 LOCAL Variablen gespeichert
// werden.
#command SAVE TO <(file)> LOCAL <var,...> ;
=> SaveLocal( <(file)>, <var> )
#command RESTORE FROM <(file)> LOCAL <var1> [,<varN>] ;
=> RestLocal( <(file)>, @<var1> [, @<varN>] )
PROCEDURE Main
LOCAL cString:= "Xbase++", ; // LOCAL Variablen deklarieren
dDate := Date() , ; // und initialisieren
nNumber:= 100 , ;
lLogic := .T.
SAVE TO TestFile ; // Wert der LOCALs sichern
LOCAL cString, dDate, nNumber, lLogic
cString := dDate := ; // Alle Werte der LOCALs
nNumber := lLogic:= NIL // löschen (NIL zuweisen)
RESTORE FROM TestFile ; // Werte wieder einlesen
LOCAL cString, dDate, nNumber, lLogic
************************************************************
* Der PPO-Code für RESTORE FROM...LOCAL lautet: *
* *
* RestLocal( "TestFile", @cString,@dDate,@nNumber,@lLogic) *
* *
* Die LOCAL Variablen werden per Referenz übergeben! *
************************************************************
? cString // Ergebnis: "Xbase++"
? dDate // Ergebnis: Date()
? nNumber // Ergebnis: 100
? lLogic // Ergebnis: .T.
RETURN
** PARAMETER werden als PRIVATE Variablen angelegt und
** können deshalb in einer .XPF-Datei gespeichert werden
PROCEDURE SaveLocal
PARAMETERS cFile, p1,p2,p3,p4,p5,p6,p7,p8,p9,p10
SAVE TO (cFile) ALL LIKE p*
RETURN
** PARAMETER werden als PRIVATE-Variablen angelegt und
** können deshalb aus einer .XPF-Datei eingelesen werden.
** Wenn LOCAL-Variablen per Referenz übergeben werden, bekommen
** sie die eingelesenen Werte der PRIVATE-Variablen zugewiesen.
PROCEDURE RestLocal
PARAMETERS cFile, p1,p2,p3,p4,p5,p6,p7,p8,p9,p10
RESTORE FROM (cFile) ADDITIVE
RETURN
Gibts dafür eine Lösung?
Ist das ein BUG?