Inhalte

# Dienst ScriptForge.Array

Stellt eine Sammlung von Methoden zum Bearbeiten und Transformieren von Matrizen mit einer Dimension (Vektoren) und MAtrizen mit zwei Dimensionen bereit. Dazu gehören Set-Operationen, Sortieren, Importieren aus und Exportieren in Textdateien.

Matrizen mit mehr als zwei Dimensionen können mit den Methoden in diesem Dienst nicht verwendet werden, die einzige Ausnahme ist die Methode CountDims, die Matrizen mit einer beliebigen Anzahl von Dimensionen akzeptiert.

Matrizen-Elemente können jede Art von Wert enthalten, einschließlich (Unter-)Matrizen.

## Aufruf des Dienstes

Vor der Verwendung des Dienstes Array muss die Bibliothek ScriptForge geladen werden mit:

        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

Durch das Laden der Bibliothek wird das Objekt SF_Array erstellt, das verwendet werden kann, um die Methoden im Dienst Array aufzurufen.

Die folgenden Codeschnipsel zeigen die verschiedenen Methoden zum Aufrufen von Methoden im Dienst Array (als Beispiel wird die Methode Append verwendet):

        Dim arr : arr = Array(1, 2, 3)
        arr = SF_Array.Append(arr, 4)

        Dim arr : arr = Array(1, 2, 3)
        Dim svc : svc = SF_Array
        arr = svc.Append(arr, 4)

        Dim arr : arr = Array(1, 2, 3)
        Dim svc : svc = CreateScriptService("Array")
        arr = svc.Append(arr, 4)

Da Python über eine integrierte Listen- und Tupelunterstützung verfügt, sind die meisten Methoden im Dienst Array nur für Basic-Skripte verfügbar. Die einzige Ausnahme ist ImportFromCSVFile, die sowohl in Basic als auch in Python unterstützt wird.

Liste der Methoden im Dienst „Array“
Append AppendColumn AppendRow Contains ConvertToDictionary Copy CountDims Difference ExportToTextFile ExtractColumn ExtractRow | Flatten ImportFromCSVFile IndexOf Insert InsertSorted Intersection Join2D Prepend PrependColumn PrependRow RangeInit | Reverse Shuffle Slice Sort SortColumns SortRows Transpose TrimArray Union Unique

Das erste Argument der meisten Methoden ist das zu betrachtende Matrixobjekt. Es wird immer als Referenz übergeben und unverändert gelassen. Methoden wie „Append“, „Prepend“ und so weiter geben nach ihrer Ausführung ein neues Matrixobjekt zurück.

## Append

Hängt die als Argumente aufgelisteten Elemente an das Ende der Eingabematrix an.

### Syntax:

svc.Append(array_1d: any[0..*], arg0: any, [arg1: any] ...): any[0..*]

### Parameter:

array_1d: Die bereits vorhandene Matrix kann leer sein.

arg0, arg1, …: Elemente, die an array_1d angehängt werden.

### Beispiel:

        Dim a As Variant
        a = SF_Array.Append(Array(1, 2, 3), 4, 5)
            ' (1, 2, 3, 4, 5)

## AppendColumn

Hängt eine neue Spalte an der rechten Seite einer zweidimensionalen Matrix an. Die resultierende Matrix hat die gleichen unteren Grenzen wie die anfängliche zweidimensionale Matrix.

### Syntax:

svc.AppendColumn(array_2d: any[0..*, 0..*], column: any[0..*]): any[0..*, 0..*]

### Parameter:

array_2d: Die bereits vorhandene Matrix kann leer sein. Wenn diese Matrix nur eine Dimension hat, wird sie als erste Spalte der resultierenden zweidimensionalen Matrix betrachtet.

column: Eine eindimensionale Matrix mit so vielen Elementen wie Zeilen in array_2d vorhanden sind.

### Beispiel:

        Dim a As Variant, b As variant
        a = SF_Array.AppendColumn(Array(1, 2, 3), Array(4, 5, 6))
            ' ((1, 4), (2, 5), (3, 6))
        b = SF_Array.AppendColumn(a, Array(7, 8, 9))
            ' ((1, 4, 7), (2, 5, 8), (3, 6, 9))
        c = SF_Array.AppendColumn(Array(), Array(1, 2, 3))
            ' ∀ i ∈ {0 ≤ i ≤ 2} : b(0, i) ≡ i

## AppendRow

Fügt am Ende einer zweidimensionalen Matrix eine neue Zeile hinzu. Die resultierende Matrix hat die gleichen unteren Grenzen wie die anfängliche zweidimensionale Matrix.

### Syntax:

svc.AppendRow(array_2d: any[0..*, 0..*], row: any[0..*]): any[0..*, 0..*])

### Parameter:

array_2d: Die bereits vorhandene Matrix kann leer sein. Wenn diese Matrix eine Dimension hat, wird sie als die erste Zeile der resultierenden zweidimensionalen Matrix betrachtet.

row: Eine eindimensionale Matrix mit so vielen Elementen wie es Spalten in array_2d gibt.

### Beispiel:

        Dim a As Variant, b As variant
        a = SF_Array.AppendRow(Array(1, 2, 3), Array(4, 5, 6))
            '  ((1, 2, 3), (4, 5, 6))
        b = SF_Array..AppendRow(Array(), Array(1, 2, 3))
            ' ∀ i ∈ {0 ≤ i ≤ 2} : b(i, 0) ≡ i

## Contains

Überprüft, ob eine eindimensionale Matrix eine bestimmte Zahl, einen bestimmten Text oder ein bestimmtes Datum enthält. Beim Textvergleich kann zwischen Groß- und Kleinschreibung unterschieden werden oder nicht.
Sortierte Eingabematrizen müssen homogen gefüllt werden, das heißt alle Elemente müssen Skalare desselben Typs sein (Elemente vom Typ Empty und Null sind verboten).
Das Ergebnis der Methode ist unvorhersehbar, wenn die Matrix als sortiert angekündigt wird und es in Wirklichkeit nicht ist.
Eine binäre Suche wird durchgeführt, wenn die Matrix sortiert ist, andernfalls wird es einfach von oben nach unten durchsucht und die Elemente vom Typ Empty und Null werden ignoriert.

### Syntax:

svc.Contains(array_1d: any[0..*], tofind: any, casesensitive: bool = False, sortorder: str = ""): bool

### Parameter:

array_1d: Die zu durchsuchende Matrix.

tofind: Eine Zahl, ein Datum oder eine Zeichenfolge, die/das gesucht werden soll.

casesensitive: Nur für Zeichenfolgenvergleiche (Standrad = False).

sortorder: Kann entweder "ASC", "DESC" oder "" (nicht sortiert) sein. Der Standardwert ist "".

### Beispiel:

        Dim a As Variant
        a = SF_Array.Contains(Array("A","B","c","D"), "C", SortOrder := "ASC") ' True
        SF_Array.Contains(Array("A","B","c","D"), "C", CaseSensitive := True) ' False

## ConvertToDictionary

Speichern Sie den Inhalt einer 2-Spalten-Matrix in einem Objekt ScriptForge.Dictionary.
Der Schlüssel wird aus der ersten Spalte extrahiert, der Eintrag aus der zweiten.

### Syntax:

svc.ConvertToDictionary(array_2d: any[0..*, 0..1]): obj

### Parameter:

array_2d: Daten, die in ein Objekt ScriptForge.Dictionary konvertiert werden sollen.

- Die erste Spalte darf ausschließlich Zeichenfolgen mit einer Länge größer Null enthalten, in beliebiger Reihenfolge. Diese Werte werden als Beschriftungen im Wörterbuch verwendet.

- Die zweite Spalte enthält die Daten, die dem entsprechenden Etikett im Wörterbuch zugeordnet werden.

### Beispiel:

        Dim a As Variant, b As Variant
        a = SF_Array.AppendColumn(Array("a", "b", "c"), Array(1, 2, 3))
        b = SF_Array.ConvertToDictionary(a)
        MsgBox b.Item("c") ' 3

## Copy

Erstellt eine Kopie einer ein- oder zweidimensionalen Matrix.

### Syntax:

svc.Copy(array_nd: any[0..*]): any[0..*]

svc.Copy(array_nd: any[0..*, 0..*]): any[0..*, 0..*]

### Parameter:

array_nd: Die zu kopierende ein- oder zweidimensionale Matrix.

### Beispiel:

Eine einfache Zuweisung eines Objekts Array kopiert seine Referenz, anstatt eine Kopie des Inhalts des Objekts zu erstellen. Siehe das Beispiel unten:

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Die nachstehende Zuordnung erfolgt durch Bezugnahme
        b = a
        ' Daher ändert das Ändern von Werten in "b" auch "a".
        b(0) = 10
        MsgBox a(0) ' 10

Durch die Verwendung der Methode Copy wird eine Kopie des gesamten Objekts Array erstellt. Im Beispiel unten sind a und b unterschiedliche Objekte und das Ändern von Werten in b wirkt sich nicht auf Werte in a aus.

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Erstellt eine Kopie von "a" mit der Methode "Copy"
        b = SF_Array.Copy(a)
        b(0) = 10
        MsgBox a(0) ' 1

## CountDims

Zählt die Anzahl der Dimensionen einer Matrix. Das Ergebnis kann größer als zwei sein.
Wenn das Argument keine Matrix ist, wird -1 zurückgegeben.
Wenn die Matrix nicht initialisiert ist, wird 0 zurückgegeben.

### Syntax:

svc.CountDims(array_nd: any): int

### Parameter:

array_nd: Die zu untersuchende Matrix.

### Beispiel:

        Dim a(1 To 10, -3 To 12, 5)
        MsgBox SF_Array.CountDims(a) ' 3

## Difference

Erstellt eine Menge als nullbasierte Matrix, indem Sie den Differenzoperator auf die beiden Eingabematrizen anwenden. Resultierende Elemente stammen aus der ersten Matrix und nicht aus dem zweiten.
Die resultierende Matrix wird in aufsteigender Reihenfolge sortiert.
Beide Eingabematrizen müssen homogen gefüllt sein, ihre Einträge müssen Skalare vom gleichen Typ sein. Elemente vom Typ Empty und Null sind verboten.
Bei Textvergleichen kann zwischen Groß- und Kleinschreibung unterschieden werden oder nicht.

### Syntax:

svc.Difference(array1_1d: any[0..*], array2_1d: any[0..*], casesensitive: bool = False): any[0..*]

### Parameter:

array1_1d: Eine eindimensionales Referenzmatrix, deren Elemente auf ihre Entfernung untersucht werden.

array2_1d: Eine eindimensionales Matrix, deren Elemente von der ersten Eingabematrix subtrahiert werden.

casesensitive: Dieses Argument gilt nur, wenn die Matrizen mit Zeichenfolgen gefüllt sind (Standard = False).

### Beispiel:

        Dim a As Variant
        a = SF_Array.Difference(Array("A", "C", "A", "b", "B"), Array("C", "Z", "b"), True)
            ' ("A", "B")

## ExportToTextFile

Schreibt alle Elemente der Matrix nacheinander in eine Textdatei. Existiert die Datei bereits, wird sie ohne Warnung überschrieben.

### Syntax:

svc.ExportToTextFile(array_1d: any[0..*], filename: str, [encoding: str]): bool

### Parameter:

array_1d: Die zu exportierende Matrix. Sie darf nur Zeichenfolgen enthalten.

filename: Der Name der Textdatei, in welche die Daten geschrieben werden. Der Name muss gemäß der aktuellen Eigenschaft FileNaming des Dienstes SF_FileSystem ausgedrückt werden.

encoding: Der zu verwendende Zeichensatz. Verwenden Sie einen der unter IANA-Zeichensätze aufgelisteten Namen. Beachten Sie, dass LibreOffice möglicherweise nicht alle vorhandenen Zeichensätze implementiert hat (Standard ist "UTF-8").

### Beispiel:

        SF_Array.ExportToTextFile(Array("A","B","C","D"), "C:\Temp\A short file.txt")

## ExtractColumn

Extrahiert aus einer zweidimensionalen Matrix eine bestimmte Spalte als neue Matrix.
Seine untere Grenze LBound und obere Grenze UBound sind identisch mit denen der ersten Dimension der Eingabematrix.

### Syntax:

svc.ExtractColumn(array_2d: any[0..*, 0..*], columnindex: int): any[0..*, 0..*]

### Parameter:

array_2d: Die Matrix, aus der extrahiert werden soll.

columnindex: Die zu extrahierende Spaltennummer – muss im Intervall [LBound, UBound] liegen.

### Beispiel:

        ' Erzeugt eine 3x3-Matrix: |1, 2, 3|
        '                      |4, 5, 6|
        '                      |7, 8, 9|
        Dim mat as Variant, col as Variant
        mat = SF_Array.AppendRow(Array(), Array(1, 2, 3))
        mat = SF_Array.AppendRow(mat, Array(4, 5, 6))
        mat = SF_Array.AppendRow(mat, Array(7, 8, 9))
        ' Extrahiert die dritte Spalte: |3, 6, 9|
        col = SF_Array.ExtractColumn(mat, 2)

## ExtractRow

Extrahieren Sie aus einer zweidimensionalen Matrix eine bestimmte Zeile als neue Matrix.
Ihre untere LBound und obere Grenze UBound sind identisch mit denen der zweiten Dimension der Eingabematrix.

### Syntax:

svc.ExtractRow(array_2d: any[0..*, 0..*], rowindex: int): any[0..*, 0..*]

### Parameter:

array_2d: Die Matrix, aus dem extrahiert werden soll.

rowindex: Die zu extrahierende Zeilennummer – muss im Intervall [LBound, UBound] liegen.

### Beispiel:

        ' Erzeugt eine 3x3-Matrix: |1, 2, 3|
        '                      |4, 5, 6|
        '                      |7, 8, 9|
        Dim mat as Variant, row as Variant
        mat = SF_Array.AppendRow(Array(), Array(1, 2, 3))
        mat = SF_Array.AppendRow(mat, Array(4, 5, 6))
        mat = SF_Array.AppendRow(mat, Array(7, 8, 9))
        ' Extrahiert die erste Zeile: |1, 2, 3|
        row = SF_Array.ExtractRow(mat, 0)

## Flatten

Stapelt alle einzelnen Elemente einer Matrix und alle Elemente in seiner Teilmatrix zu einer neuen Matrix ohne Teilmatrizen. Leere Teilmatrizen werden ignoriert und Teilmatrizen mit einer Anzahl von Dimensionen größer als eins werden nicht abgeflacht.

### Syntax:

svc.Flatten(array_1d: any[0..*]): any[0..*]

### Parameter:

array_1d: Die bereits vorhandene Matrix kann leer sein.

### Beispiel:

        Dim a As Variant
        a = SF_Array.Flatten(Array(Array(1, 2, 3), 4, 5))
            ' (1, 2, 3, 4, 5)

Sie können die Methode Flatten zusammen mit anderen Methoden wie Append oder Prepend verwenden, um einen Satz von eindimensionalen Matrizen zu einer einzigen eindimensionalen Matrix zu verketten.

### Beispiel:

Als nächstes sehen Sie ein Beispiel dafür, wie die Methoden Flatten und Append kombiniert werden können, um drei Matrizen zu verketten.

        ' Erzeugt drei Matrizen für dieses Beispiel
        Dim a as Variant, b as Variant, c as Variant
        a = Array(1, 2, 3)
        b = Array(4, 5)
        c = Array(6, 7, 8, 9)
        ' Verkettet die drei Matrizen zu einer einzigen eindimensionalen Matrix
        Dim arr as Variant
        arr = SF_Array.Flatten(SF_Array.Append(a, b, c))
        '(1, 2, 3, 4, 5, 6, 7, 8, 9)

## ImportFromCSVFile

Importiert die Daten, die in einer Datei mit kommagetrennten Werten (CSV) enthalten sind. Das Komma kann durch ein beliebiges Zeichen ersetzt werden.

Das anwendbare CSV-Format wird unter IETF Common Format and MIME Type for CSV Files beschrieben.

Jede Zeile in der Datei enthält einen vollständigen Datensatz (Zeilenaufteilung ist nicht zulässig).
Sequenzen wie \n, \t, … bleiben jedoch unverändert. Verwenden Sie die Methode SF_String.Unescape(), um sie zu verwalten.

Die Methode gibt eine zweidimensionale Matrix zurück, deren Zeilen einem einzelnen Datensatz entsprechen, der in der Datei gelesen wurde, und dessen Spalten einem Feld des Datensatzes entsprechen. Die Kohärenz der Feldtypen über die Spalten hinweg wird nicht überprüft. Es wird eine bestmögliche Schätzung gemacht, um numerische und Datumstypen zu identifizieren.

Wenn eine Zeile weniger oder mehr Felder enthält als die erste Zeile in der Datei, wird eine Ausnahme ausgelöst. Leerzeilen werden jedoch einfach ignoriert. Wenn die Größe der Datei die Anzahl der Elemente überschreitet (siehe im Code), wird eine Warnung ausgegeben und die Matrix wird abgeschnitten.

### Syntax:

svc.ImportFromCSVFile(filename: str, delimiter: str = ',', dateformat: str = ''): any[0..*]

### Parameter:

filename: Der Name der Textdatei, welche die Daten enthält. Der Name muss gemäß der aktuellen Eigenschaft FileNaming des Dienstes SF_FileSystem ausgedrückt werden.

delimiter: Ein einzelnes Zeichen, normalerweise ein Komma, ein Semikolon oder ein Tabulator-Zeichen (Standard = ",").

dateformat: Ein spezieller Mechanismus behandelt Daten, wenn dateformat entweder "YYYY-MM-DD", "DD-MM-YYYY" oder "MM-DD-YYYY" ist. Der Bindestrich (-) kann durch einen Punkt (.), einen Schrägstrich (/) oder ein Leerzeichen ersetzt werden. Andere Datumsformate werden ignoriert. Daten, die standardmäßig eine leere Zeichenfolge "" sind, werden als normaler Text betrachtet.

### Beispiel:

Betrachtet wird die CSV-Datei „myFile.csv“ mit folgendem Inhalt:

Name,Geburtsdatum,Adresse,Stadt

Anna,31.03.2002,"Rue de l'Eglise, 21",Toulouse

Fred,04.05.1998,"Rue Albert Einstein, 113A",Carcassonne

Die folgenden Beispiele in Basic und Python lesen den Inhalt der CSV-Datei in ein Objekt Array ein.

##### In Basic

        Dim arr As Variant
        arr = SF_Array.ImportFromCSVFile("C:\Temp\MeineDatei.csv", DateFormat := "YYYY/MM/DD")
        MsgBox arr(0, 3) ' Stadt
        MsgBox arr(1, 2) ' Rue de l'église, 21
        MsgBox arr(1, 3) ' Toulouse

##### In Python

        from scriptforge import CreateScriptService
        svc = CreateScriptService("Array")
        bas = CreateScriptService("Basic")
        arr = svc.ImportFromCSVFile(r"C:\Temp\MeineDatei.csv", dateformat = "YYYY/MM/DD")
        bas.MsgBox(arr[0][3]) # Stadt
        bas.MsgBox(arr[1][2]) # Rue de l'église, 21
        bas.MsgBox(arr[1][3]) # Toulouse

## IndexOf

Sucht in einer eindimensionalen Matrix nach einer Zahl, einer Zeichenfolge oder einem Datum. Beim Textvergleich kann zwischen Groß- und Kleinschreibung unterschieden werden oder nicht.
Wenn die Matrix sortiert ist, muss sie homogen gefüllt sein, was bedeutet, dass alle Elemente Skalare desselben Typs sein müssen (Elemente vom Typ Empty und Null sind verboten).
Das Ergebnis der Methode ist unvorhersehbar, wenn die Matrix als sortiert angekündigt wird und es tatsächlich nicht ist.
Eine binäre Suche wird in sortierten Matrizen durchgeführt. Andernfalls werden Matrizen einfach von oben nach unten durchsucht und Elemente vom Typ Empty und Null werden ignoriert.
Die Methode gibt LBound(input array) – 1 zurück, wenn die Suche nicht erfolgreich war.

### Syntax:

svc.IndexOf(array_1d: any[0..*], tofind: any, casesensitive: bool = False, sortorder: str = ''): int

### Parameter:

array_1d: Die zu durchsuchende Matrix.

tofind: Eine Zahl, ein Datum oder eine Zeichenfolge, die/das gesucht werden soll.

casesensitive: Nur für Zeichenfolgenvergleiche (Default = False).

sortorder: Kann entweder "ASC", "DESC" oder "" (nicht sortiert) sein. Der Standardwert ist "".

### Beispiel:

        MsgBox SF_Array.IndexOf(Array("A","B","c","D"), "C", SortOrder := "ASC") ' 2
        MsgBox SF_Array.IndexOf(Array("A","B","c","D"), "C", CaseSensitive := True) ' -1

## Insert

Fügt vor einem bestimmten Index der Eingabematrizen die als Argumente aufgelisteten Elemente ein.
Argumente werden blind eingefügt. Jedes von ihnen kann entweder ein Skalar eines beliebigen Typs oder eine Teilmatrix sein.

### Syntax:

svc.Insert(array_1d: any[0..*], before: int, arg0: any, [arg1: any] ...): any[0..*]

### Parameter:

array_1d: Die bereits vorhandene Matrix, kann leer sein.

before: Der Index, vor dem eingefügt werden soll; muss im Intervall [LBound, UBound + 1] liegen.

arg0, arg1, …: Elemente, die in array_1d eingefügt werden.

### Beispiel:

        Dim a As Variant
        a = SF_Array.Insert(Array(1, 2, 3), 2, "a", "b")
            ' (1, 2, "a", "b", 3)

## InsertSorted

Fügt ein neues Element an seiner Stelle in eine sortierte Matrix ein.
Die Matrix muss homogen gefüllt sein, das heißt alle Einträge müssen Skalare desselben Typs sein.
Elemente vom Typ Empty und Null sind verboten.

### Syntax:

svc.InsertSorted(array_1d: any[0..*], item: any, sortorder: str = 'ASC', casesensitive: bool = False): any[0..*]

### Parameter:

array_1d: Die Matrix, in welche der Wert eingefügt wird.

item: Der einzufügende Skalarwert vom selben Typ wie die vorhandenen Matrixelemente.

sortorder: Kann entweder "ASC" (Standard) oder "DESC" sein.

casesensitive: Nur für Zeichenfolgenvergleiche (Standard = False).

### Beispiel:

        Dim a As Variant
        a = SF_Array.InsertSorted(Array("A", "C", "a", "b"), "B", CaseSensitive := True)
            ' ("A", "B", "C", "a", "b")

## Intersection

Erstellt eine Menge als nullbasierter Matrizen, indem der Schnittmengenoperator auf die beiden Eingabematrizen angewendet wird. Ergebniselemente sind in beiden Matrizen enthalten.
Die resultierende Matrix wird in aufsteigender Reihenfolge sortiert.
Beide Eingabematrizen müssen homogen gefüllt sein, das heißt alle Einträge müssen Skalare vom gleichen Typ sein. Elemente vom Typ Empty und Null sind verboten.
Bei Textvergleichen kann zwischen Groß- und Kleinschreibung unterschieden werden oder nicht.

### Syntax:

svc.Intersection(array1_1d: any[0..*], array2_1d: any[0..*], casesensitive: bool = False): any[0..*]

### Parameter:

array1_1d: Die erste Eingabematrix.

array2_1d: Die zweite Eingabematrix.

casesensitive: Gilt für Matrizen, die mit Textelementen gefüllt sind (Standard = False).

### Beispiel:

        Dim a As Variant
        a = SF_Array.Intersection(Array("A", "C", "A", "b", "B"), Array("C", "Z", "b"), True)
            ' ("C", "b")

## Join2D

Verbindet eine zweidimensionale Matrix mit zwei Trennzeichen, eines für die Spalten, eines für die Zeilen.

### Syntax:

svc.Join2D(array_2d: any [0..*, 0..*], [columndelimiter: str], [rowdelimiter: str], [quote: str]): str

### Parameter:

array_2d: Jedes Element muss entweder Text, eine Zahl, ein Datum oder ein boolescher Wert sein.
Datumsangaben werden in das Format JJJJ-MM-TT hh:mm:ss umgewandelt.
Ungültige Elemente werden durch eine Zeichenfolge der Länge Null ersetzt.

columndelimiter: Begrenzt jede Spalte (Standard = Tab/Chr(9)).

rowdelimiter: Begrenzt jede Zeile (Standard = LineFeed/Chr(10))

quote: Wenn True, werden Zeichenfolgen mit doppelten Anführungszeichen geschützt. Der Standardwert ist False.

### Beispiel:

        ' arr = | 1, 2, "A", [2020-02-29], 51, 2, "A", [2020-02-29], 5           |
        '       | 6, 7, "this is a string", 9, 106, 7, "this is a string", 9, 10 |
        Dim arr as Variant : arr = Array()
        arr = SF_Array.AppendRow(arr, Array(1, 2, "A", [2020-02-29], 51, 2, "A", [2020-02-29], 5))
        arr = SF_Array.AppendRow(arr, Array(6, 7, "this is a string", 9, 106, 7, "this is a string", 9, 10))
        Dim arrText as String
        arrText = SF_Array.Join2D(arr, ",", "/", False)
        ' 1,2,A,,51,2,A,,5/6,7,this is a string,9,106,7,this is a string,9,10

## Prepend

Stellt am Anfang der Eingabematrix die als Argumente aufgelisteten Elemente voran.

### Syntax:

svc.Prepend(array_1d: any[0..*], arg0: any, [arg1: any] ...): any[0..*]

### Parameter:

array_1d: Die bereits vorhandene Matrix, kann leer sein.

arg0, arg1, …: Eine Liste von Elementen, die array_1d vorangestellt werden.

### Beispiel:

        Dim a As Variant
        a = SF_Array.Prepend(Array(1, 2, 3), 4, 5)
            ' (4, 5, 1, 2, 3)

## PrependColumn

Stellt der linken Seite einer zweidimensionalen Matrix eine neue Spalte voran. Die resultierende Matrix hat die gleichen unteren Grenzen wie die anfängliche zweidimensionale Matrix.

### Syntax:

svc.PrependColumn(array_2d: any[0..*, 0..*], column: any[0..*]): any[0..*, 0..*]

### Parameter:

array_2d: Die bereits vorhandene Matrix, kann leer sein. Wenn diese Matrix eine Dimension hat, wird sie als letzte Spalte der resultierenden zweidimensionalen Matrix betrachtet.

column: Eine eindimensionale Matrix mit so vielen Elementen wie Zeilen in array_2d vorhanden sind.

### Beispiel:

        Dim a As Variant, b As variant
        a = SF_Array.PrependColumn(Array(1, 2, 3), Array(4, 5, 6))
            ' ((4, 1), (5, 2), (6, 3))
        b = SF_Array.PrependColumn(Array(), Array(1, 2, 3))
            ' ∀ i ∈ {0 ≤ i ≤ 2} : b(0, i) ≡ i

## PrependRow

Stellt am Anfang einer zweidimensionalen Matrix eine neue Zeile voran. Die resultierende Matrix hat dieselben unteren Grenzen wie die anfängliche zweidimensionale Matrix.

### Syntax:

svc.PrependRow(array_2d: any[0..*, 0..*], row: any[0..*]): any[0..*, 0..*]

### Parameter:

array_2d: Die bereits vorhandene Matrix, kann leer sein. Wenn diese Matrix eine Dimension hat, wird sie als letzte Zeile der resultierenden zweidimensionalen Matrix betrachtet.

row: Eine eindimensionale Matrix, die so viele Elemente enthält, wie es Spalten in array_2d gibt.

### Beispiel:

        Dim a As Variant, b As variant
        a = SF_Array.PrependRow(Array(1, 2, 3), Array(4, 5, 6))
            ' ((4, 5, 6), (1, 2, 3))
        b = SF_Array.PrependRow(Array(), Array(1, 2, 3))
            ' ∀ i ∈ {0 ≤ i ≤ 2} : b(i, 0) ≡ i

## RangeInit

Initialisiert eine neue nullbasierte Matrix mit numerischen Werten.

### Syntax:

svc.RangeInit(from: num, upto: num, [bystep: num]): num[0..*]

### Parameter:

from: Wert des ersten Eintrags.

upto: Das letzte Element sollte UpTo nicht überschreiten.

bystep: Die Differenz zwischen zwei aufeinanderfolgenden Elementen (Standard = 1).

### Beispiel:

        Dim a As Variant
        a = SF_Array.RangeInit(10, 1, -1)
            ' (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

## Reverse

Gibt die umgekehrte eindimensionale Eingabematrix zurück.

### Syntax:

svc.Reverse(array_1d: any[0..*]): any[0..*]

### Parameter:

array_1d: Die umzukehrende Matrix.

### Beispiel:

        Dim a As Variant
        a = SF_Array.Reverse(Array("a", 2, 3, 4))
            ' (4, 3, 2, "a")

## Shuffle

Gibt eine zufällige Permutation einer eindimensionalen Matrix zurück.

### Syntax:

svc.Shuffle(array_1d: any[0..*]): any[0..*]

### Parameter:

array_1d: Die zu durchmischende Matrix.

### Beispiel:

        Dim a As Variant
        a = SF_Array.Shuffle(Array(1, 2, 3, 4))
            ' Matrix "a" ist jetzt in zufälliger Reihenfolge, beispielsweise (2, 3, 1, 4)

## Slice

Gibt eine Teilmenge einer eindimensionalen Matrix zurück.

### Syntax:

svc.Slice(array_1d: any[0..*], from: int, [upto: int]): any[0..*]

### Parameter:

array_1d: Die zu teilende Matrix.

from: Der untere Index in array_1d der zu extrahierenden Teilmatrix (from eingeschlossen)

upto: Der obere Index in array_1d der zu extrahierenden Teilmatrix (upto eingeschlossen). Der Standardwert ist die Obergrenze von array_1d. Wenn bis < von dann ist die zurückgegebene Matrix leer.

### Beispiel:

        Dim a As Variant
        a = SF_Array.Slice(Array(1, 2, 3, 4, 5), 1, 3) ' (2, 3, 4)

## Sort

Sortiert eine eindimensionales Matrix in aufsteigender oder absteigender Reihenfolge. Bei Textvergleichen kann die Groß-/Kleinschreibung beachtet werden oder nicht.
Die Matrix muss homogen gefüllt sein, das heißt die Einträge müssen Skalare desselben Typs sein.
Elemente vom Typ Empty und Null sind erlaubt. Üblicherweise ist Empty < Null < jeder andere skalare Wert.

### Syntax:

svc.Sort(array_1d: any[0..*], sortorder: str, casesensitive: bool = False): any[0..*]

### Parameter:

array_1d: Die zu sortierende Matrix.

sortorder: Kann entweder "ASC" (Standard) oder "DESC" sein.

casesensitive: Nur für Zeichenfolgenvergleiche (Standard = False).

### Beispiel:

        Dim a As Variant
        a = SF_Array.Sort(Array("a", "A", "b", "B", "C"), CaseSensitive := True)
            ' ("A", "B", "C", "a", "b")

## SortColumns

Gibt eine Permutation der Spalten einer zweidimensionalen Matrix zurück, sortiert nach den Werten einer gegebenen Zeile.
Die Zeile muss homogen gefüllt sein, das heißt alle Einträge müssen Skalare vom gleichen Typ sein.
Elemente vom Typ Empty und Null sind erlaubt. Üblicherweise ist Empty < Null < jeder andere skalare Wert.

### Syntax:

svc.SortColumns(array_2d: any[0..*, 0..*], rowindex: int, sortorder: str, casesensitive: bool = False): any[0..*, 0..*]

### Parameter:

array_2d: Die zu sortierende zweidimensionale Matrix.

rowindex: Der Index der Zeile, die als Referenz zum Sortieren der Spalten verwendet wird.

sortorder: Kann entweder "ASC" (Standard) oder "DESC" sein.

casesensitive: Nur für Zeichenfolgenvergleiche (Standard = False).

### Beispiel:

        ' arr = | 5, 7, 3 |
        '       | 1, 9, 5 |
        '       | 6, 1, 8 |
        Dim arr as Variant : arr = Array(5, 7, 3)
        arr = SF_Array.AppendRow(arr, Array(1, 9, 5))
        arr = SF_Array.AppendRow(arr, Array(6, 1, 8))
        arr = SF_Array.SortColumns(arr, 2, "ASC")
        ' arr = | 7, 5, 3 |
        '       | 9, 1, 5 |
        '       | 1, 6, 8 |

## SortRows

Gibt eine Permutation der Zeilen einer zweidimensionalen Matrix zurück, sortiert nach den Werten einer bestimmten Spalte.
Die Spalte muss homogen gefüllt sein, daher müssen alle Einträge Skalare vom gleichen Typ sein.
Elemente vom Typ Empty und Null sind erlaubt. Üblicherweise ist Empty < Null < jeder andere skalare Wert.

### Syntax:

svc.SortRows(array_2d: any[0..*, 0..*], columnindex: int, sortorder: str, casesensitive: bool = False): any[0..*, 0..*]

### Parameter:

array_2d: Die zu sortierende Matrix.

columnindex: Der Index der Spalte, die als Referenz zum Sortieren der Zeilen verwendet wird.

sortorder: Kann entweder "ASC" (Standard) oder "DESC" sein.

casesensitive: Nur für Zeichenfolgenvergleiche (Standard = False).

### Beispiel:

        ' arr = | 5, 7, 3 |
        '       | 1, 9, 5 |
        '       | 6, 1, 8 |
        Dim arr as Variant : arr = Array(5, 7, 3)
        arr = SF_Array.AppendRow(arr, Array(1, 9, 5))
        arr = SF_Array.AppendRow(arr, Array(6, 1, 8))
        arr = SF_Array.SortRows(arr, 0, "ASC")
        ' arr = | 1, 9, 5 |
        '       | 5, 7, 3 |
        '       | 6, 1, 8 |

## Transpose

Vertauscht Zeilen und Spalten in einer zweidimensionalen Matrix.

### Syntax:

svc.Transpose(array_2d: any[0..*, 0..*]): any[0..*, 0..*]

### Parameter:

array_2d: Die zu transponierende zweidimensionale Matrix.

### Beispiel:

        ' arr1 = | 1, 2 |
        '        | 3, 4 |
        '        | 5, 6 |
        arr1 = Array(1, 2)
        arr1 = SF_Array.AppendRow(arr1, Array(3, 4))
        arr1 = SF_Array.AppendRow(arr1, Array(5, 6))
        arr2 = SF_Array.Transpose(arr1)
        ' arr2 = | 1, 3, 5 |
        '        | 2, 4, 6 |
        MsgBox arr2(0, 2) ' 5

## TrimArray

Entfernt aus einer eindimensionalen Matrix alle Einträge vom Typ Null, Empty und der Länge Null.
Zeichenfolgenelemente werden mit der LibreOffice Basic-Funktion Trim() beschnitten.

### Syntax:

svc.TrimArray(array_1d: any[0..*]): any[0..*]

### Parameter:

array_1d: Die zu beschneidende Matrix.

### Beispiel:

        Dim a As Variant
        a = SF_Array.TrimArray(Array("A", "B", Null, " D "))
            ' ("A", "B", "D")

## Union

Erstellt eine Menge als nullbasierte Matrix, indem der Vereinigungsoperator auf die beiden Eingabematrizen angewendet wird. Die resultierenden Elemente stammen aus einer der beiden Matrizen.
Die resultierende Matrix wird in aufsteigender Reihenfolge sortiert.
Beide Eingabematrizen müssen homogen gefüllt sein, ihre Einträge müssen Skalare vom gleichen Typ sein.Elemente vom Typ Empty und Null sind verboten.
Bei Textvergleichen kann zwischen Groß- und Kleinschreibung unterschieden werden oder nicht.

### Syntax:

svc.Union(array1_1d: any[0..*], array2_1d: any[0..*], casesensitive: bool = False): any[0..*]

### Parameter:

array1_1d: Die erste Eingabematrix.

array2_1d: Die zweite Eingabematrix.

casesensitive: Nur anwendbar, wenn die Matrizen mit Zeichenfolgen gefüllt sind (Standard = False).

### Beispiel:

        Dim a As Variant
        a = SF_Array.Union(Array("A", "C", "A", "b", "B"), Array("C", "Z", "b"), True)
            ' ("A", "B", "C", "Z", "b")

## Unique

Erstellt einen Satz eindeutiger Werte, die aus der Eingabematrix abgeleitet werden.
Die Eingabematrix muss homogen gefüllt sein, ihre Einträge müssen Skalare vom gleichen Typ sein. Elemente vom Typ Empty und Null sind verboten.
Bei Textvergleichen kann zwischen Groß- und Kleinschreibung unterschieden werden oder nicht.

### Syntax:

svc.Unique(array_1d: any[0..*], casesensitive: bool = False): any[0..*]

### Parameter:

array_1d: Die Eingabematrix.

casesensitive: Nur anwendbar, wenn die Matrix mit Zeichenfolgen gefüllt ist (Standard = False).

### Beispiel:

        Dim a As Variant
        a = SF_Array.Unique(Array("A", "C", "A", "b", "B"), CaseSensitive := True)
            '  ("A", "B", "C", "b")

Alle ScriptForge Basic-Routinen oder Bezeichner, denen ein Unterstrich "_" vorangestellt ist, sind für den internen Gebrauch reserviert. Sie sind nicht für die Verwendung in Basic-Makros oder Python-Skripten vorgesehen.

Verwandte Themen

Matrixfunktionen

Calc-Funktionen in Macros verwenden

Dienst ScriptForge.Dictionary