FG Eigene und mächtige Variablenverwaltung mit [cX.Var(ID).X]:
Mit diesen Platzhaltern können eigene Variablenbereiche definiert, flexibel verwendet, gespeichert und geladen, serialisiert sowie gemeinsam gelöscht werden.
Ein solcher Bereich kann auch sehr gut zum Ablegen von Programmeinstellungen verwendet werden, da die Einstellungen beliebig sein können und das Sichern/Wiederherstellen dieser Einstellungen direkt unterstützt wird.
Für die Einträge können auch Datentypen definiert werden. Neben den typisierten Exportmöglichkeiten (z.B. für den Datenaustausch mit Webdiensten per JSON) ist dadurch auch eine echte binäre Ausgabe möglich, was etwa manchmal für die Übergabe von binären Strukturen an DLL-Aufrufe benötigt wird.
Der Datentyp des Eintrags kann durch das Anhängen eines speziellen Zeichens an den Wertenamen (Postfix) bestimmt werden. Dieser wird beim Schreiben überprüft, und bei einem ungültige Wert wie z.B. "AB" für ein Zahlenfeld wird das Fehlerereignis ::Var_Formatfehler bzw. ::Var(ID)_Formatfehler aufgerufen, welches einen neuen Wert für den Eintrag zurückliefern kann. Andernfalls bleibt der Eintrag unverändert.
Mögliche Typen-Postfixe sind "%" für ganzzahliger Wert (32bit Integer), ">" für ganzzahlige 16bit-Werte, "<" für ganzzahlige 8bit-Werte (Bytes), "!" für Fließkommazahl, "#" für Datum/Uhrzeit, "?" für Ja/Nein-Einträge (Boolean) oder "-" für interne, anonyme Einträge, welche nicht im Editor von [cX.Var()._Editieren()] aufgeführt sind.
Datentypen spielen neben der Werteprüfung auch eine Rolle bei der typisierten Serialisierung (siehe ._JSON) oder dem Editieren der Inhalte (siehe ._Editieren()).
Einzelne Einträge können auch ihrerseits Listen sein, auf deren Eintrag Nummer X dann direkt per [cX.Var().Eintrag(X)] zugegriffen werden kann. Die Anzahl der Elemente in einem Listeneintrag kann per .[cX.Var()._Max(Eintrag)] ermittelt werden.
Folgende Platzhalter stehen als [cX.Var(ID).X] zur Verfügung:
.X | Zugriff auf den Wert X (Name oder Index 1..._Anzahl) |
._Anzahl | Anzahl der Werte im Variablenbereich ID |
._Eintrag(Index) | Zugriff auf den per Index (Name oder numerischer Index 0..n) angegebenen Eintrag (alternative Schreibweise). Wird ein ungültiger Wert in einen mit Datentyp versehenen Eintrag geschrieben, wird das Fehlerereignis ::Var_Formatfehler aufgerufen. |
._Name(Index) | Ermitteln des Eintragsnamens an der per Index angegebenen Position |
._FehlerFeld | Name des Feldes, in das zuletzt ein ungültiger Wert eingetragen werden sollte |
._Editieren(X) | das Lesen dieses Platzhalters erstellt ein Eingabeformular für die Bearbeitung der enthaltenen Felder. Als Ergebnis wird 0 bei Abbruch und 1 bei der Bestätigung des Formulars durch den Anwender geliefert. Definierte Datentypen werden geprüft und berücksichtigt, anonyme Einträge (mit - am Ende) werden nicht aufgeführt. Als Index X kann hier der Dialogtitel angegeben werden, optional gefolgt von Breite;X;Y |
._Histogramm(Modus;Text) | Liefert eine Liste aller unterschiedlichen Einträge mit Anzahl. Zum Modus siehe [cX.Stapel().Histogramm]. |
._Max(Name) | Ermitteln der Anzahl Einträge des Listeneintrags Name |
._Name(Index) | Ermitteln des Eintragsnamens an der per Index angegebenen Position |
._Leeren | Setzen auf: kein Inhalt, um alle Werte in Variablenbereich ID zu löschen, Wertename/-index zum Löschen eines einzelnen Eintrags oder Namensmaske für mehrere Elemente. Die Elemente bleiben erhalten, nur die Inhalte werden zurückgesetzt (siehe auch ._Löschen) |
._Löschen | Setzen auf: kein Inhalt, um alle Einträge in Variablenbereich ID zu löschen, Wertename/-index zum Löschen eines einzelnen Eintrags oder Namensmaske für mehrere Elemente. Die Elemente werden samt Inhalt aus der Liste entfernt (siehe auch ._Leeren) |
._Laden(Modus) | Setzen auf Dateinamen: Laden des mit _Speichern gespeicherten Variablenbereichs ID |
._Speichern(Modus) | Setzen auf Dateiname speichert den Dateninhalt in die Datei als Name=Wert-Liste In Modus kann jeweils der Datentyp angegeben werden (siehe unten bei _Serialisiert) |
._Liste(Modus) | Setzen auf eine mehrzeilige Liste mit Variablenname=Wert legt mehrere Inhalte auf einmal fest, Lesen liefert eine entsprechende Liste aller enthaltenen Variablen (auch z.B. nutzbar für Mehrfach-Setzen) Beim Lesen liefert Modus=1 nur die Namen, 2 nur die Werte. Wird hier 4 addiert, ergibt das eine sortierte Liste. |
._KopiereAusSkript | Setzen kopiert alle Benutzervariablen aus den Skriptvariablen in das Objekt (nur normale Variablen, keine Unterobjekte wie cX.Var- oder cX.Stapel) |
._KopiereInSkript | Setzen kopiert alle Benutzervariablen aus dem Objekt in die Skriptvariablen Mit diesen beiden Funktionen kann etwa eine Kopie der aktuellen Variableninhalte im Skript gesichert und wiederhergestellt werden. |
._KopiereAusSkript | Setzen auf Maske (oder leer) kopiert alle passenden (oder alle) Variablen aus den Skriptvariablen in das zuvor geleerte Objekt |
._KopiereInSkript | Setzen auf Maske (oder leer) kopiert alle passenden (oder alle) Variablen aus dem Objekt in die (zuvor geleerten) Skriptvariablen Hinweis: Mit diesen beiden Funktionen können beispielsweise erst alle Variablen gesichert und dann ein Var-Inhalt in die cX-Variablen überspielt werden. Danach könnte ein Vorlagen-Text, in dem die Var-Felder einfach als [Variablen] enthalten sind, direkt mit den Inhalten des Var-Objekts ausgefüllt werden (einfacher als jede Variable mit [cX.Var([VarId]).Feld] o.ä. auszuschreiben und die passende [VarId] zu setzen).. |
._Suche(Name;Wert;Maske) | Durchsucht alle definierten Var()-Objekte und liefert die ID des ersten, bei dem das angegebene Paar existiert. Der Wert kann als Maske angegeben werden. Optional kann noch eine Maske für die IDs der Var()-Objekte angegeben werden, welche durchsucht werden sollen. |
._SucheID(Wertemaske) | Liefert die erste ID des Eintrags, dessen Wert der angegebenen Maske entspricht. Optional kann mit zusätzlichem ;1 eine Liste aller passenden Eintrags-IDs angefordert werden. Wird ein dritter Parameter angegeben, ist dies der Maximalwert (Zahl oder Datum), wobei alle Einträge zwischen dem als Maske angegebenen Wert oder Datum und diesem ermittelt werden (etwa [cX.Var()._SucheID(20;1;30)] für alle IDs (1) mit Werten von 20 bis 30). |
._UnterschiedZu(Index) | Vergleicht den Var-Inhalt mit einem anderen per Index (ID des Vergleichs-Var) angegebenen und liefert eine Liste der Feldnamen, bei denen im anderen Var-Objekt der Inhalt abweicht oder nicht existiert. Existiert das andere Var-Objekt nicht, wird ein Fehler ausgelöst. |
Beispiel:
*** Demo der Var()-Objekte *** Einträge in [cX.Var(Zahlen)] einsetzen Setze in [cX.Var(Zahlen).Zahl1]: 'Eins' Setze in [cX.Var(Zahlen).Zahl2]: 'Zwei' Setze in [cX.Var(Zahlen).Zahl3]: 'Drei'
( Setze in [cX.Var(Zahlen)._Löschen]: 'Zahl2'
( Setze in [cX.Var(Zahlen)._Speichern]: 'TestSammlung.cxv' ( Setze in [cX.Var(Zahlen)._Laden]: 'TestSammlung.cxv'
*** Einträge aus [cX.Var(Zahlen)] holen Meldung "Anzahl: [cX.Var(Zahlen)._Anzahl]¶Zahl 1: [cX.Var(Zahlen).Zahl1] = [cX.Var(Zahlen).1]¶Zahl 2: [cX.Var(Zahlen).Zahl2] = [cX.Var(Zahlen).2]¶Zahl 3: [cX.Var(Zahlen).Zahl3] = [cX.Var(Zahlen).3]" (Titel: 'Info', Info, OK) |
Das Beispielskript zeigt, wie Var-Objekte zum Ablegen und Zugreifen auf Daten eingesetzt werden können. Die auskommentierten Zeilen stellen zudem noch andere Möglichkeiten vor, etwa das Löschen eines Eintrags aus der Liste oder das Speichern bzw. Laden des Inhalts.
cX-Webseite: http://www.clickexe.net