FG Stapel-Platzhalter per [cX.Stapel(ID).X]:
Diese Platzhalter ermöglichen das Ablegen und wieder Aufnehmen von Werten auf einen Stapel.
Beim Ablegen wird der Wert direkt auf den Stapel gelegt, beim Abnehmen wird der je nach Typ zuerst wieder auszulesende Wert gelesen und vom Stapel entfernt. Der Typ bestimmt die Reihenfolge, in der die Werte abgenommen werden sollen. Der direkte Zugriff auf Elemente kann auch per [cX.Stapel(ID).Wert(X)] erfolgen.
Ebenso können Stapel als Variablenfelder (Arrays) verwendet werden, da beliebige Zugriffe auf Elemente über einen Index möglich sind. Außerdem sind eine Vielzahl an Auswertungen und Bearbeitungsfunktionen für die im Stapel enthaltenen Daten verfügbar, was diesen Platzhalter zum "Schweizer Taschenmesser" für Datenlisten aller Art macht..
Es können beliebig viele Stapel verwendet werden, die in den Platzhaltern durch die in Klammern angegebene ID adressiert werden.
.Ablesen | Lesen: Nächsten Eintrag vom Stapel ablesen (nicht entfernen, "Peek"). Als Index kann eine Bedingung für das Ablesen angegeben werden: 1=kleinster, 2=größter numerisch, 3=kleinster, 4=größter alpha, 5=kürzester, 6=längster |
.Abnehmen | Lesen: Nächsten Eintrag vom Stapel nehmen (und entfernen, "Pop") |
.Herausnehmen | Bestimmten Eintrag aus Stapel auslesen und löschen Der optionale Index hat die gleiche Funktion wie oben bei .Ablesen |
.AktuellerIndex | liefert Elementeindex bei [cX.Stapel.VerarbeiteMit] verarbeitetes oder als Duplikat erkanntes Listenelement |
.AktuellesElement | Aktuell bei [cX.Stapel.VerarbeiteMit] verarbeitetes oder als Duplikat abgelehntes Listenelement (Inhalt) |
.Anhängen | Setzen: Stapelinhalt aus zusammengesetzter Liste ergänzen (entspricht .Liste(-1)) |
.Anzahl | Lesen: Anzahl Einträge auf Stapel. Wird dabei eine Maske (z.B. Wert*) angegeben, wird die Anzahl der Elemente geliefert, die zu dieser Maske passen Setzen auf 1...n: löscht überzählige Einträge bzw. fügt fehlende als Leereinträge hinzu |
.Auflegen | Setzen: Wert auf Stapel legen ("Push") |
.Durchschnitt | Ermittelt den Durchschnittswert der Werte auf dem Stapel. |
.Einfügen(n) | Setzen: Wert in Stapel an Position n einfügen (n>0: hinter n, n<0: vor -n) |
.Anhängen | Setzen: Wert an Stapel anhängen |
.Ersetzen(X;Y) | .Ersetzen(X;Y) ersetzt alle X gegen Y und liefert die Anzahl der geänderten Elemente |
.Entfernen | Setzen auf Maske(n) löscht alle dazu passenden Einträge |
.Filtern | Setzen auf Maske(n) löscht alle nicht dazu passenden Einträge Für beide gilt: Maske(n) mit Wildcards ohne Berücksichtigung der Groß-/Kleinschreibung, etwa "ABC*" für alle mit "abc" beginnenden Einträge oder "A*;*O*" für alle Einträge, die mit A beginnen oder ein O enthalten Beispiel: Gefilterte Druckerliste *** Druckerliste filtern und anzeigen Setze in [cX.Stapel(Drucker).Liste]: '[cX.Drucker.Liste]' Setze in [cX.Stapel(Drucker).Filtern]: 'Microsoft*' Meldung "[cX.Stapel(Drucker).Liste]" (Titel: 'MS-Drucker', Info, OK) |
.FiltereMit$ | Setzen von [cX.Stapel.FiltereMit$] auf Ausdruck mit [cX.Stapel.AktuellesElement] entfernt alle Elemente vom Stapel, bei denen der Ausdruck 0 bzw. Falsch ergibt. Beispiel: Setzen auf [cX.Stapel.AktuellesElement]<100 entfernt alle Einträge ab dem Wert 100. Die Formel darf nicht im Voraus berechnet werden, da sie vom Stapel selbst ausgewertet wird, daher das $. Wahlweise kann auch eine Sprungmarke angegeben werden (beginnend mit ::), die eine Funktion zur Verarbeitung des Eintrags enthält und den Filterwert als Ergebnis zurückgibt |
.Histogramm(Modus) | Liefert eine Liste aller unterschiedlichen Einträge mit Anzahl. Als Index kann der Modus angegeben werden: 0="Eintrag;Anzahl" sortiert nach Eintrag, 1="Anzahl;Eintrag" sortiert nach Anzahl, 2/3=rückwärts sortieren +4=Groß-/Kleinschreibung ignorieren |
.ID | Liefert die ID des zuletzt aktiven Stapels (z.B. in Fehlerereignis) |
.KeineDuplikate | 0=Duplikate erlaubt, 1=nicht erlaubt, 2=nicht erlaubt (Groß-/Kleinschreibung berücksichtigen) => beim Auflegen von unerwünschten Duplikaten wird dann das Ereignis ::Stapel(ID)_Duplikat aufgerufen mit dem doppelten Wert in [cX.Stapel(ID).AktuellesElement] |
.LetzterFehler | Lesen: Nummer des zuletzt aufgetretenen Fehlers 1=Überlauf, 2=ungültiger Index, 3=keine Daten |
.Liste | Schreibt oder liest den Stapelinhalt als Liste. Optional kann als Parameter ein Index 1..n übergeben werden, ab dem die Liste erstellt wird, oder ein Trennzeichen (nicht-numerisch), bei dem nur die Textteile rechts von diesem Trennzeichen geliefert werden (für 2spaltige Listen) |
.ListeFilter(X) | Gefilterten Stapelinhalt als zusammengesetzte Liste liefern; als Filter wird eine Vergleichsmaske angegeben, etwa [cX.Stapel(x).ListeFilter(A*)] |
.ListeMit(Indices) | Liste der Elemente mit den angegebenen Indices zusammenstellen (z.B. [cX.Stapel.ListeMit(2;3;6)]) |
.ListeVonBis(von;bis) | Liste der Elemente ab/bis zum angegebenen Index zusammenstellen (z.B. [cX.Stapel.ListeVonBis(2;6)]) |
.LöscheDuplikate | Löschen von Duplikaten durch Setzen auf 1 (Standard) oder 2 (Groß-/Kleinschreibung berücksichtigen) Hinweis: Ändert nicht den KeineDuplikate-Modus des Stapels |
.Löschen | Lesen/Setzen: Stapel leeren und ggf. alte Anzahl liefern |
.Löschen(Index) | Den angegebenen Eintrag aus der Liste löschen und beim Lesen den alten Wert liefern. Optional kann als 2. Parameter die Anzahl der zu löschenden Einträge angegeben werden. |
.Median | Berechnet den Median der Stapelwerte. |
.Serialisiert | FG Liest/Setzt den gesamten Inhalt des Stapels als BASE64-codierte Zeichenkette (Hinweis: Diese nicht mit cX4 kompatibel - s.u.) Diese Zeichenkette kann etwa in eine Datei geschrieben bzw. aus einer Datei ausgelesen werden Optional kann noch als Index ein anderes Format gewählt werden: 1=cX4-kompatibles Format, 2=XML, 3=JSON, 4=Binär (nur Lesen) Die Formate XML und JSON eigenen sich etwa für das Abspeichern/Wiederherstellen der Daten oder den Datenaustausch mit Webdiensten. Siehe auch Var-Objekt |
.Sortieren | Setzen zum Sortieren: 0=Mischen 1 oder leer=alphanumerisch aufsteigend (Standard), -1=absteigend, 2=numerisch aufsteigend, -2=absteigend, 3=der Länge nach aufsteigend, -3=absteigend 4=Datumswerte aufsteigend, -4=absteigend, |
.SpalteHinzufügen | Listeninhalt als zusätzliche Spalte (mit ; getrennt) hinzufügen. |
.StdAbweichung Ermittelt die Standardabweichung der Werte auf dem Stapel.
.Suchen(X) | Lesen zum Suchen der Stapeleintragnummer, die zum Suchbegriff X passt (Wildcards * und ? möglich), liefert 0 bei "nicht gefunden". Optional kann der Parameter X um ;1 ergänzt werden, damit alle passenden Indices als Liste geliefert werden. |
.SuchenAb(n;X) | Suchen nach zu X passendem Wert (auch hier Wildcards möglich) ab Eintrag n; liefert 0 für "nicht gefunden" bzw. Werteindex |
.Summe | Liefert die numerische Summe der numerischen Stapelwerte |
.Maximum | Liefert den größten numerischen Wert auf dem Stapel |
.Minimum | Liefert den kleinsten numerischen Wert auf dem Stapel |
.Längster | Liefert den längsten (Text-)Eintrag auf dem Stapel |
.Kleinster | Liefert den kürzesten (Text-)Eintrag auf dem Stapel |
.Tauschen | Setzen auf X;Y tauscht die Einträge mit den Indices X und Y aus |
.Typ | Lesen/Setzen: Typ des Stapels x: 0=LIFO (zuletzt aufgelegter Wert wird zuerst abgenommen), 1=FIFO (zuerst abgelegter Wert wird zuerst abgenommen) |
.VerarbeiteMit$ | bearbeitet alle Einträge im Stapel mit der gesetzten Formel; [cX.Stapel(ID).AktuellesElement] steht hierbei für das jeweils bearbeitete Element. Die Formel darf nicht im Voraus berechnet werden, da sie vom Stapel selbst ausgewertet wird, daher das $. Beispiel: Setze in [cX.Stapel(Test).VerarbeiteMit$]: '[cX.Rechne([cX.Stapel(Test).AktuellesElement] * 2)]' Wahlweise kann auch eine Sprungmarke angegeben werden (beginnend mit ::), die eine Funktion zur Verarbeitung des Eintrags enthält (beispielsweise wie in obigem Beispiel) und den neuen Wert als Ergebnis zurückgibt. Optional kann dabei ein Parameter mit angegeben werden, um zusätzliche Informationen an die Bearbeitungsfunktion zu übergeben. Wird also z.B. StapelwertBearbeiten(Test) angegeben und die Marke lautet ::StapelwertBearbeiten(Name), wird diese aufgerufen, wobei dann "Test" in der Variablen [Name] steht (siehe Funktionen). Wird als Ereignismarke dagegen nur StapelwertBearbeiten angegeben, wird ebenfalls die Marke ::StapelwertBearbeiten(Name) aufgerufen, wobei [Name] dann leer ist. |
.VergleicheMit(Stapel-ID;Modus)
liefert eine Liste der Unterschiede zwischen den Einträgen dieses und des anderen Stapels. Als Modus kann gewählt werden:
0=Liste mit 1/0/-1 für kleiner/gleich/größer,
1=Differenz (numerisch),
2=nur Indices der Abweichungen
3=Anzahl Abweichungen
4=Liste der Elemente, die im 2. Stapel nicht vorkommen
.Wert(n) | Eintrag Nummer n vom Stapel auslesen (nicht entfernen) bzw. setzen, wobei n auch eine Formel sein kann. Sollten die Stapel-Einträge als Listen vorliegen, kann der Stapel als 2D-Liste verwendet werden und per [cX.Stapel.Wert(Zeile;Spalte)] auf die einzelnen Zellen zugegriffen werden Beispiel: [cX.Stapel(ID).Wert 1+1] liest den 2. Wert aus dem Stapel, Setze in [cX.Stapel(Teststapel).Wert(1+1)]: 'Wert2' legt ihn fest |
.Zeilenvorlage | Definiert eine Zeilenvorlage für die Ausgabe des Stapels als Liste, welche pro Zeile ausgewertet wird. Diese Vorlage sollte als $-Variable verwendet werden und [cX.Stapel.AktuellesElement] und/oder [cX.Stapel.AktuellerIndex] enthalten |
.Zufallszahlen | Setzen auf X;Y;Z füllt den Stapel mit x Zufallszahlen zwischen Z (optional, Standard=1) bis Y |
Folgende Ereignisse können vom Stapel ausgelöst werden:
::Stapel(ID)_Gelesen | bei Auslesen aus dem Stapel (ohne Veränderung) |
::Stapel(ID)_Verändert | bei Veränderungen im Stapel |
::Stapel(ID)_Fehler | Zugriffsfehler, etwa bei Überschreitung des Maximums (falls angegeben) - siehe .LetzterFehler |
::Stapel(ID)_Duplikat | Es wurde ein unerwünschtes doppeltes Element aufgelegt (siehe .KeineDuplikate) |
cX-Webseite: http://www.clickexe.net