Tabellen und Datenbanken
Tabellen und Datenbanken
Für die folgenden Funktionen werden benötigte Tabellen als Ressource an die Funktion übergeben. Die Tabelle wird intern gelesen und aufbereitet, über Tabellen- und Feldnamen können verschiedene Felder ausgelesen werden.
Die Implementierung einer sqlite-Schnittstelle für den Zugriff auf eine lokale Datenbank-Instanz mit definierbaren Suchabfragen ist in Planung.
Suchabfrage "selectRow"
Die Funktion selectRow()
such in einer einfachen Tabelle sequentiell durch alle Zeilen nach einer Übereinstimmung mit den angegebenen Schlüsseln und gibt den gefundenen Zeilenindex zurück. Wir keine Übereinstimmung gefunden, wird -1 zurückgegeben. Eine Suche wird nur dann ausgeführt, wenn sich mindestens einer der angefragten Schlüsselwerte ändert.
Dieser Zeilenindex kann in getField()
verwendet werden, um beliebige Werte aus den Datenfeldern der Tabelle zu lesen.
m1 = selectRow(key1, ..., { table: <str> // mandatory
, colSep: <regex>
, anyKey: <var>
, key: <str> // mandatory (*)
, keys: [<str>] // mandatory (*)
});
// (*) exactly one of key or keys must be defined
Eigenschaft | Wert | Beschreibung |
---|---|---|
table | <str> | Verpflichtend: Name einer Text-Ressource, die den Inhalt der Tabelle definiert. Die Datenelemente werden als Varianten interpretiert und liefern somit den bestmöglichen Datentyp. Fließkommazahlen sind mit einem Punkt als Dezimaltrennzeichen zu schreiben. |
colSep | <regex> | Regular Expression, der die Spaltentrennzeichen definiert. Default: "[,;|\t]" , universell verwendbar für jeweils ein einzelnes der in [] angegeben Zeichen. |
anyKey | <var> | Ein Datenelement dieses Werts liefert für beliebige Schlüsselwerte ein positives Ergebnis, default: "*" |
key | <str> | Verpflichtend (*, **): Ein Datenfeld der Tabelle, in dem der erste und einzige Schlüsselwert key1 gesucht wird. |
keys | [<str>] | Verpflichtend (*, **): Ein Vektor mit mehreren Datenfeldern, die in der angegebenen Reihenfolge auf die Schlüsselwerte key1, key2, key3, ... anzuwenden sind. |
(*) Es muss genau eine der Eigenschaften key oder keys verwendet werden, um die Schlüsselspalte(n) auszuwählen.
(**) Als Default wird immer eine exakte Übereinstimmung des Schlüsselwertes mit den Einträgen in der Tabellenspalte gesucht. Dem Bezeichner des Feldes können optional folgende Vergleichsoperatoren vorangestellt werden, um die Abfrage zu modifizieren, Leerzeichen dürfen zwischen Operator und Bezeichner eingefügt sein:
Operator | Bedeutung | Beispiel | Ausführung wie... |
---|---|---|---|
KEY sei ein Feldbezeichner in keys:[..] | keyN sei der als Parameter übergebene Schlüsselwert | ||
== | Exakte Übereinstimmung (Default) | 'KEY' '==KEY' | keyN == Table[KEY] |
*= | für <str> : enthält | *=KEY | keyN containes Table[KEY] |
&= | für <uint>|<int> : alle Bits der Maske gesetzt | '&=KEY' | bAnd(keyN, Table[KEY]) == Table[KEY] |
&> | für <uint>|<int> : mindestens ein Bit der Maske gesetzt | '&>KEY' | bAnd(keyN, Table[KEY]) > 0 |
&0 | für <uint>|<int> :kein Bit der Maske gesetzt | '&0 KEY' | bAnd(keyN, Table[KEY]) == 0 |
<= | Kleiner oder gleich | '<=KEY' | keyN <= Table[KEY] |
< | Kleiner als | '<KEY' | keyN < Table[KEY] |
>= | Größer oder gleich | '>=KEY' | keyN >= Table[KEY] |
> | Größer als | '>KEY' | keyN < Table[KEY] |
Für den Datentyp <str>
beziehen sich die Vergleiche auf die alphabetische Reihenfolge.
Formatierung der Tabelle
-
Die Tabelle wird aus einer Text-Ressource geladen (ASCII, UTF-8)
-
Spaltentrennzeichen sind über die Eigenschaft colSep definiert.
-
Die selbe Tabelle kann in mehreren
selectRow()
Funktionen verwendet werden. Die colSep Angabe muss bei allen identisch sein, da nicht festgelegt ist, welche der Funktionen die Tabelle zuerst (und damit auch für alle anderen Instanzen) interpretiert. -
Die erste Zeile enthält die Feldnamen, mit denen dann auch die Schlüssel-Spalten und Ergebnis-Felder definiert werden.
-
Leerzeilen werden ignoriert.
-
Zeilen, die mit 3 gleichen Zeichen aus der Gruppe
_ - = ~ *
beginnen, werden als Trennlinie interpretiert und ignoriert. -
Jedes Datenfeld wird individuell als Variant gelesen und verarbeitet. Feste Datentypen für eine Spalte gibt es demnach nicht.
-
Die Suche erfolgt immer sequentiell durch alle Zeilen.
Tabelleneintrag auslesen "getField"
Die Funktion getField()
liest aus einer mit selectRow()
interpretierten Tabelle table zu dem gefundenen Zeilenindex rowIdx das zugehörende Datenelement aus dem Datenfeld field. Der Datentyp ist durch das Datenelement als Variant bestimmt.
Ist rowIdx < 0 oder außerhalb des gültigen Bereichs, wird der mit notFound definierte Variant zurück gegeben.
v1 = getField(rowIdx, { table: <str> // mandatory
, field: <str> // mandatory
, notFound: <var>
});
Eigenschaft | Wert | Beschreibung |
---|---|---|
table | <str> | Verpflichtend: Name einer Text-Ressource, die den Inhalt der Tabelle definiert. Diese muss in einer selectRow() Funktion interpretiert und geladen worden sein. |
field | <str> | Verpflichtend: Name eines Datenfeldes, um daraus den Ergebniswert auszulesen. |
notFound | <var> | Dieser Variant wird als Ergebnis geliefert, falls rowIdx kein gültiges Suchergebnis bezeichnet. Default: false. |