Słužba ScriptForge.Array (SF_Array)

Wobsah

# Słužba ScriptForge.Array

Skići zběrku metodow za manipulaciju a přetworjenje matriksow z jednej dimensiju (wektory) a matriksy z dwěmaj dimensijomaj (matriksy). To operacije set, sortěrowanje, importowanje z a eksportowanje do tekstowych datajow wopřijima.

Matriksy z wjace hač dwěmaj dimensijomaj njedadźa so z metodami w tutej słužbje wužiwać, jeničke wuwzaće je metoda CountDims, kotraž matriksy z někajkejžkuli ličbu dimensijow akceptuje.

Matriksowe zapiski móža někajku hódnotu wobsahować, inkluziwnje (pod-)matriksy.

Jednodimensionalne matriksy, kotrež jenož jednodimensionalne podmatriksy wobsahuja, so deleka datowe matriksy mjenuja. Su předewšěm za wuměny tabelowych datow ze skriptami Python a tabelemi Calc přihódne.

## Wuwołanje słužby

Prjedy hač so słužba array wužiwa, dyrbi so biblioteka ScriptForge začitać přez:

        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

Hdyž so biblioteka začita, so objekt SF_Array wutwori, kotryž da so wužiwać, zo by metody w słužbje Array wuwołał.

Slědowace kodowe šlipki rozdźělne móžnosće pokazuja, zo bychu metody w słužbje Array wuwołali (metoda Append so jako přikład wužiwa):

        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)

Dokelž Python ma zatwarjenu podpěru za lisćiny a tupele, je najwjace metodow w słužbje Array jenož za skripty Basic k dispoziciji. Jeničke wuwzaće je ImportFromCSVFile, kotraž so w Basic kaž tež w Python podpěruje.

Lisćina metodow w słužbje Array
Append AppendColumn AppendRow Contains ConvertFromDataArray ConvertToDataArray ConvertToDictionary ConvertToRange 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

Prěni argument najwjace metodow je wotpowědny matriksowy objekt. Přepodawa so přeco po referency a wostawa njezměnjeny. Metody kaž Append, Prepend atd. nowy matriksowy objekt po swojim wuwjedźenju wróćeja.

## Append

Připowěša ke kóncej zapodawanskeje matriksy zapiski, kotrež su jako argumenty nalistowane.

### Syntaksa:

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

### Parametry:

array_1d: Hižo eksistowaca matriks, móže prózdna być.

arg0, arg1, ...: Zapiski, kotrež so array_1d připowěšeja.

### Přikład:

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

## AppendColumn

Připowěša nowu špaltu naprawo wot dwudimensionalneje matriksy. Rezultowaca matriks na samsne delnje mjezy kaž spočatna dwudimensionalna matriks.

### Syntaksa:

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

### Parametry:

array_2: Hižo eksistowaca matriks, móže prózdna być. Jeli tuta matriks jenož jednu dimensiju ma, wobhladuje so jako prěnja špalta rezultowaceje dwudimensionalneje matriksy wobhladuje.

column: Jednodimensionalna matriks z telko zapiskami kaž su linki w array_2.

### Přikład:

        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

Připowěsńće deleka na dwudimensionalnej matriksy nowu linku. Rezultowaca matriks ma samsne delnje mjezy kaž spočatna dwudimensionalna matriks.

### Syntaksa:

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

### Parametry:

array_2d: Hižo eksistowaca matriks, móže prózdna być. Jeli tuta matriks jednu dimensiju ma, wobhladuje so jako prěnja linka rezultowaceje dwudimensionalneje matriksy.

row: Jednodimensionalna matriks z telko zapiskami kaž su špalty w array_2d.

### Přikład:

        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

Přepruwuje, hač jednodimensionalna matriks wěstu ličbu, tekst abo datum wobsahuje. Tekstowe přirunanje móže na wulkopisanje dźiwać abo nic.
Sortěrowane zapodawanske matriksy dyrbja so homogenje pjelnić, to rěka, wšě zapiski dyrbja skalary samsneho typa być (elementy Empty a Null su zakazane).
Wuslědk metody předwidźomny njeje, hdyž so matriks jako sortěrowana připowědźuje a we woprawdźitosći njeje.
Binarne pytanje so přewjedźe, hdyž matriks je sortěrowana, hewak so prosće wot horjeka do deleka skenuje a zapiski Empty a Null so ignoruja.

### Syntaksa:

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

### Parametry:

array_1d: Matriks, kotraž so ma skenować.

tofind: Ličba, datum abo znamješkowy rjećazk, kotrež so maja pytać.

casesensitive: Jenož za přirunanje znamješkowych rjećazkow (standard = false).

sortorder: Móže pak "ASC", "DESC" pak "" (njesortěrowany) być. Standardna hódnota je "".

### Přikład:

        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

## ConvertFromDataArray

Přetworja datowu matriks do matriksy Basic.
Datowa matriks je matriks podmatriksow. Je-li trjeba, so jednotliwe wudawanske zapiski do znamješkowe rjećazki abo dwójne hódnoty redukuja.

Metoda skalar wróća, jednodimensionalnu matriks na bazy 0 abo dwudimensionalnu matriks na bazy 0.
Ličba špaltow w dwudimensionalnej matriksy, kotraž so z toho wuchadźa, je jenaka, kaž ličba w prěnjej podmatriksy. Jeli přichodne podmatriksy maja druhu wulkosć, so přichodne linki přez argument fillvalue wudospołnjeja abo so přirězaja.

### Syntaksa:

svc.ConvertFromDataArray(dataarray: any[any[0..*], ...], isrange: bool = False, fillvalue: str = ''): any[0..*, 0..*]

### Parametry:

dataarray: Matriks podmatriksow. Matriks a podmatriksy dyrbja bazu 0 měć.
Normalnje so datowa matriks wudawa so přez

- metodu session.ExecuteCalcFunction()

- skript Python, kotryž tupel tupelow wróća

- metodu getDataArray() z wužiwarskeho powjercha com.sun.star.sheet.XCellRangeData

isrange: Hdyž True (standard = False), so zapiski do znamješkowych rjećazkow abo dwójne hódnoty přetworjeja.

fillvalue: Kak so falowace zapiski wuměnjeja. Standard = prózdny znamješkowy rjećazk.

### Přikład:

        Dim dataarray As Variant, array2D As Variant
        dataarray = Array(Array("Col1", "Col2", "Col3"), Array(10, 20, 30))
        array2D = SF_Array.ConvertFromDataArray(dataarray)
        MsgBox array2D(1, 2) ' 30

## ConvertToDataArray

Wutwori datowu matriks ze skalara, jednodimensionalnu abo dwudimensionalnu matriks.
Datowa matriks je matriks na bazy 0 z podmatriksow na bazy 0. Je-li trjeba so jednotliwe wudawanske zapiski na znamješkowe rjećazki abo dwójne hódnoty redukuja.

Wrócena datowa matriks so zwjetša wužiwa jako

- tupel (pod)tueplow, kotryž so skriptej Python přepodawa

- argument metody setDataArray() z tykački com.sun.star.sheet.XCellRangeData

### Syntaksa:

svc.ConvertToDataArray(data: any[0..*, 0..*], isrange: bool = False, rows: int = 0, columns: int = 0): any[any[0..*], ...]

### Parametry:

daty: Zapodawanski skalar, jedno- abo dwudimensionalna matriks.

isrange: Hdyž True (standard = False), so matriksowe zapiski jako (snano prózdne) znamješkowe rjećazki abo dwójne hódnoty jenož do datoweje matriksy składuja.

linki, špalty: Ličba linkow abo špaltow wróćeneje datoweje matriksy. Hdyž so datowe limity překročuja, so ze znamješkowymi rjećatkimi na bazy 0 pjelnja. Jeli linki = 1 a zapodawanska matriks je wektor, so datowa matriks horicontalnje wusměrjuje (po standardźe so wektory wertokalnje wusměrjuja), Hdyž faluje, so wulkosć wudaća přez zapodawansku matriks postaja.

### Přikład:

        Dim data As Variant, dataarray As Variant
        data = Array(1, 2, 3)
        data = SF_Array.AppendRow(data, Array(4, 5, 6))
        dataarray = SF_Array.ConvertToDataArray(data)
        MsgBox dataarray(1)(2) ' 6

## ConvertToDictionary

Składujće wobsah dwušpaltoweje matriksy do objekta ScriptForge.Dictionary.
Kluč so z prěnjeje špalty ekstrahuje, zapisk z druheje.

### Syntaksa:

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

### Parametry:

array_2d: Daty, kotrež so maja do objekta ScriptForge.Dictionary přetworić.

- Prěnja špalta smě jenož znamješkowe rjećazki z dołhosću wobsahować, kotraž je wjetša hač nula, w někajkim porjedźe. Tute hódnoty budu so jako popisy w słowniku wužiwać.

- Druha špalta daty wobsahuje, kotrež so wotpowědnemu popisej w słowniku připokazuja.

### Přikład:

        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

## ConvertToRange

Wutwori płaćiwy wobsah celoweho wobłuka ze skalara, jednodimensionalnu matriks, dwudimensionalnu matriks abo datowu matriks (datowa matriks je matriks na bazy 0 z podmatriksow na bazy 0). Delnje mjezy matriksow so we wudaću wobchowaja.

Jednotliwe zapiski so přeco na znamješkowe rjećazki abo dwójne hódnoty redukuja, inkluziwnje logiske hódnoty (boolean) abo datumowe podaća.

Wróćeny skalar dwudimensionalneje matriksy je płaćiwy argument metody session.ExecuteCalcFunction(). To je předewšěm wužitne w konteksće [kompleksnych] matriksowych funkcijow.

### Syntaksa:

svc.ConvertToRange(data: any[0..*, 0..*], direction: str = 'V' | 'H'): any[0..*, 0..*]

### Parametry:

data: Zapodawanski skalar, jednodimensionalna matriks, dwudimensionalna matriks abo datowa matriks.

direction: Wusměrjenje wobłuka, hdyž je wektor, pak „V“[wertikalny, standard] abo „H“[horicontalny].

### Přikład:

        Dim session As Variant  :  session = CreateScriptService"Session")
        Dim matrix As Variant, result As Variant
        matrix = Array(-1, 2, 3)
        matrix = SF_Array.AppendRow(matrix, Array(4, -5, 6))
        matrix = SF_Array.AppendRow(matrix, Array(7, 8, -9)
        result = session.ExecuteCalcFunction("ABS", SF_Array.ConvertToRange(matrix))
        MsgBox result(2)(2) ' 9 - result is a data array

## Copy

Wutworja kopiju jedno- abo dwudimensionalneje matriksy.

### Syntaksa:

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

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

### Parametry:

array_nd: Jedno- abo dwudimensionalna matriks, kotraž so ma kopěrować.

### Přikład:

Jednore připokazanje objekta Array swoju referencu kopěruje, město toho zo by kopiju wobsaha objekta wutworiło. Hlejće slědowacy přikład:

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Slědowace připokazanje so přez referencu přewjedźe
        b = a
        ' Tohodla so tež "a" změni, hdyž so "b" změni
        b(0) = 10
        MsgBox a(0) ' 10

Hdyž so metoda Copy wužiwa, so kopija cyłeho objekta Array wutworja. W slědowacym přikładźe stej a a b rozdźělnej objektaj a hdyž hódnoty w b změniće, so to na hódnoty w a njewuskutkuje.

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Wutworja kopiju "a" z pomocu metody "Copy"
        b = SF_Array.Copy(a)
        b(0) = 10
        MsgBox a(0) ' 1

## CountDims

Liči ličbu dimensijow matriksy. Wuslědk móže wjetši hač dwaj być.
Jeli argument matriks njeje, so -1 wróći.
Jeli matriks njeje inicializowana, so 0 wróći.

### Syntaksa:

svc.CountDims(array_nd: any): int

### Parametry:

array_nd: Matriks, kotraž so ma přepytować.

### Přikład:

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

## Difference

Wutworja sadźbu jako matriks na bazy nula přez to, zo diferencny operator na dwě zapodawanskej matriksy nałožuje. Rezultowace zapiski z prěnjeje matriksy pochadźeja a nic z druheje.
Rezultowaca matriks so w postupowacym porjedźe sortěruje.
Wobě zapodawanskej matriksy dyrbitej so homogenje pjelnić, jeju zapiski dyrbja skalary samsneho typa być. ZapiskiEmpty a Null su zakazane.
Tekstowe přirunanje móže na wulkopisanje dźiwać abo nic.

### Syntaksa:

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

### Parametry:

array_1d: Jednodimensionalna referencna matriks, kotrejež zapiski so za wotstronjenjom přepytuja.

array2_1d: Jednodimensionalny matriks, kotrejež zapiski so wot prěnjeje zapodawanskeje matriksy subtrahuja.

casesensitive: Tutón argument je jenož nałožujomny, jeli su matriksy ze znamješkowymi rjećazkami wupjelnjene (standard = false).

### Přikład:

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

## ExportToTextFile

Pisa wšě zapiski matriksy jedyn za druhim do tekstoweje dataje. Jeli dataja hižo eksistuje, budźe so bjez warnowanja přepisować.

### Syntaksa:

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

### Parametry:

array_1d: Matriks, kotraž so ma eksportować. Smě jenož znamješkowe rjećazki wobsahować.

filename: Mjeno tekstoweje dataje, do kotrejež so daty pisaja. Mjeno dyrbi so po aktualnej kajkosći FileNaming słužby SF_FileSystem zwuraznić.

encoding: Znamješkowa sadźba, kotraž měła so wužiwać. Wužiwajće jedne z mjenow, kotrež su w znamješkowych sadźbachIANA nalistowane. Dźiwajće na to, zo LibreOfficeDev njemóže wšě eksistowace znamješkowe sadźby (standard je "UTF-8") implementować.

### Přikład:

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

## ExtractColumn

Ekstrahuje wěstu špaltu z dwudimensionalneje matriksy jako nowu matriks.
Jeje delnja mjeza LBound a hornja mjeza UBound stej tymaj prěnjeje dimensije zapodawanskeje matriksy identiskej.

### Syntaksa:

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

### Parametry:

array_2d: Matriks, z kotrejež so ma ekstrahować.

columnindex: Ličba špalty, kotraž so ma ekstrahować – dyrbi w interwalu [LBound, UBound] być.

### Přikład:

        ' Wutworja matriks 3x3: |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))
        ' Ekstrahuje třeću špaltu: |3, 6, 9|
        col = SF_Array.ExtractColumn(mat, 2)

## ExtractRow

Ekstrahuje wěstu linku z dwudimensionalneje matriksy jako nowu matriks.
Jeje delnja mjeza LBound a hornja mjeza UBound stej tymaj druheje dimensije zapodawanskeje matriksy identiskej.

### Syntaksa:

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

### Parametry:

array_2d: Matriks, z kotrejež so ma ekstrahować.

rowindex: Ličba linki, kotraž so ma ekstrahować – dyrbi w interwalu [LBound, UBound] być.

### Přikład:

        ' Wutworja matriks 3x3: |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))
        ' Ekstrahuje prěnju linku: |1, 2, 3|
        row = SF_Array.ExtractRow(mat, 0)

## Flatten

Stapluje wšě jednotliwe zapiski matriksy a wšě zapiski w jeje podmatriksach do jedneje noweje matriksy bjez podmatriksow. Prózdne podmatriksy so ignoruja a podmatriksy z ličbu dimensijow, kotraž je wjetša hač jedna, so wopłonjeja.

### Syntaksa:

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

### Parametry:

array_1d: Hižo eksistowaca matriks, móže prózdna być.

### Přikład:

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

Móžeće metodu Flatten hromadźe z druhimi metodami kaž Append abo Prepend wužiwać, zo byšće sadźbu jednodimensionalnych matriksow do jednotliweje jednodimensionalneje matriksy zwjazał.

### Přikład:

Přichodny je přikład za to, kak metodźe Flatten a Append datej so kombinować, zo bychu so tři matriksy zwjazali.

        ' Wutworja tři matriksy za tutón přikład
        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)
        ' Zwjazuje tři matriksy do jednotliweje jednodimensionalneje matriksy
        Dim arr as Variant
        arr = SF_Array.Flatten(SF_Array.Append(a, b, c))
        '(1, 2, 3, 4, 5, 6, 7, 8, 9)

## ImportFromCSVFile

Importuje daty, kotrež su w dataji z přez komu wotdźělenymi hódnotami (CSV) wobsahowane. Koma dyrbi so přez druhe znamješko wuměnić.

Nałožujomny format CSV so w IETF Common Format and MIME Type for CSV Files wopisuje.

Kóžda linka w dataji połnu datowu sadźbu wobsahuje (dźělenje linkow dowolene njeje).
Ale sekwency kaž \n, \t, … njezměnjene wostawaja. Wužiwajće metodu SF_String.Unescape(), zo byšće je rjadował.

Metoda dwudimensionalnu matriks wróća, kotrejež linki jednotliwej datowej sadźbje wotpowěduja, kotraž je so w dataji čitała a kotrejež špalty polu datoweje sadźby wotpowěduja. Koherenca pólnych typow so přez špalty njepřepruwuje. Čini so najlěpše móžne trochowanje, zo bychu so numeriske a datumowe typy identifikowali.

Jeli linka mjenje abo wjace polow hač prěnja linka w dataji wobsahuje, so wuwzaće wuwabi. Prózdne linki wšak so prosće ignoruja. Jeli wulkosć dataje ličbu zapiskow překročuje (hlejće w kodźe), so warnowanje wuwabi a matriks so wotrěza.

### Syntaksa:

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

### Parametry:

filename: Mjeno tekstoweje dataje, kotraž daty wobsahuje. Mjeno dyrbi so po aktualnej kajkosći FileNaming słužby SF_FileSystem zwuraznić.

delimiter: Jednotliwe znamješko, zwjetša koma, semikolon abo tabulatorowe znamješko (standard = ",").

dateformat: Specialny mechanizm z datumami wobchadźa, hdyž dateformat je pak "LLLL-MM-DD", "DD-MM-LLLL" pak "MM-DD-LLLL". Wjazawka (-) da so z dypkom (.), nakósnej smužku (/) abo mjezotu wuměnić. Druhe datumowe formaty so ignoruja. Datumy, kotrež su po standardźe prózdny znamješkowy rjećazk ""m so jako normalny tekst wobhladuja.

### Přikład:

Wobhladajće sej dataju CSV "myFile.csv" ze slědowacym wobsahom:

Mjeno,narodnydźeń,adresa,město

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

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

Slědowace přikłady w Basic a Python wobsah dataje CSV do objekta Array čitaja.

##### W Basic

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

##### W Python

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

## IndexOf

Pytajće w jednodimensionalnej matriksy za ličbu, znamješkowym rjećazkom abo datumom. Tekstowe přirunanje móže na wulkopisanje dźiwać abo nic.
Jeli so matriks sortěruje, dyrbi so homogenje pjelnić, štož rěka, zo wšě zapiski dyrbja skalary samsneho typa być (zapiski Empty a Null su zakazane).
Wuslědk metody je njepředwidźomny, hdyž so matriks jako sortěrowana připowědźuje a we woprawdźitosći njeje.
Binarne pytanje so na sortěrowane matriksy nałožuje. Hewak so matriksy prosće wot horjeka dele skenuja a zapiski Empty a Null so ignoruja.
Metoda LBound (zapodawanska matriks) – 1, jeli pytanje njeje wuspěšne było.

### Syntaksa:

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

### Parametry:

array_1d: Matriks, kotraž so ma skenować.

tofind: Ličba, datum abo znamješkowy rjećazk, kotrež so maja pytać.

casesensitive: Jenož za přirunanja znamješkowych rjećazkow (standard = false).

sortorder: Móže pak "ASC", "DESC" pak "" (njesortěrowany) być. Standardna hódnota je "".

### Přikład:

        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

Zasadźuje zapiski, kotrež su jako argumenty nalistowany, před datym indeksom zapidawanskeje matriksy.
Argumenty so slepje zasadźuja. Kóždy z nich móhł pak skalar někajkeho typa pak podmatriks być.

### Syntaksa:

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

### Parametry:

array_1d: Hižo eksistowaca matriks, móže prózdna być.

before: Indeks, před kotrymž so ma zasadźić; dyrbi w interwalu [LBound, UBound + 1] być.

arg0, arg1, ...: Zapiski, kotrež so do array_1d zasadźuja.

### Přikład:

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

## InsertSorted

Zasadźuje nowy zapisk do sortěrowaneje matriksy na jeho městnje.
Matriks dyrbi so homogenje pjelnić, štož rěka, zo wšě zapiski dyrbja skalary samsneho typa być.
Zapiski Empty a Null su zakazane.

### Syntaksa:

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

### Parametry:

array_1d: Matriks, do kotrejež so hódnota zasadźi.

item: Skalarowa hódnota, kotraž so ma zasadźić, samsneho typa kaž eksistowace matriksowe zapiski.

sortorder: Móže pak "ASC" (standard) pak "DESC" być.

casesensitive: Jenož za přirunanja znamješkowych rjećazkow (standard = false).

### Přikład:

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

## Intersection

Wutworja sadźbu jako matriks na bazy nula přez to, zo so operator rězneho mnóstwa na dwě zapodawanskej matriksy nałožuje. Rezultowace zapiski su we woběmaj matriksomaj wobsahowanje.
Rezultowaca matriks so w postupowacym porjedźe sortěruje.
Wobě zapodawanskej matriksy dyrbitej so homogenje pjelnić, hinak prajene, wšě zapiski dyrbja skalary samsneho typa być. ZapiskiEmpty a Null su zakazane.
Tekstowe přirunanje móže na wulkopisanje dźiwać abo nic.

### Syntaksa:

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

### Parametry:

array1_1d: Prěnja zapodawanska matriks.

array2_1d: Druha zapodawanska matriks.

casesensitive: Nałožuje so na matriksy, kotrež su z tekstowymi zapiskami wupjelnjene (standard = false).

### Přikład:

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

## Join2D

Zwjazuje dwudimensionalnu matriks z dwěmaj dźělatkomaj, jedne za špalty, jedne za linki.

### Syntaksa:

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

### Parametry:

array_2d: Kóždy zapisk dyrbi pak tekst, ličba, datum abo Boolowa hódnota być.
Datumy so do formata LLLL-MM-DD hh:mm:ss přetworjeja.
Njepłaćiwe zapiski so ze znamješkowym rjećazkom z dołhosć nul wuměnjeja.

columndelimeter: Wotmjezuje kóždu špaltu (standard = Tab/Chr(9)).

rowdelimiter: Wotmjezuje kóždu linku (standard = LineFeed/Chr(10))

quote: Jeli True, so znamješkowe rjećazki z dwójnymi pazorkami škitaja. Standard je false.

### Přikład:

        ' 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

Započina zapodawansku matriks ze zapiskami, kotrež su jako argumenty nalistowane.

### Syntaksa:

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

### Parametry:

array_1d: Hižo eksistowaca matriks, móže prózdna być.

arg0, arg1, ...: Lisćina zapiskow, kotrež so maja před array_1d być.

### Přikład:

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

## PrependColumn

Započina lěwy bok dwudimensionalneje matriksy z nowej špaltu. Rezultowaca matriks ma samsne delnje mjezy kaž spočatna dwudimensionalna matriks.

### Syntaksa:

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

### Parametry:

array_2d: Hižo eksistowaca matriks, móže prózdna być. Jeli tuta matriks ma jednu dimensiju, wobhladuje so jako poslednja špalta rezultowaceje dwudimensionalneje matriksy.

column: Jednodimensionalna matriks z telko zapiskami kaž su linki w array_2d.

### Přikład:

        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

Započina dwudimensionalnu matriks z nowej linku. Rezultowaca matriks ma samsne delnje mjez kaž spočatna dwudimensionalna matriks.

### Syntaksa:

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

### Parametry:

array_2d: Hižo eksistowaca matriks, móže prózdna być. Jeli tuta matriks ma jednu dimensiju, wobhladuje so jako prěnja linka rezultowaceje dwudimensionalneje matriksy.

row: Jednodimensionalna matriks, kotraž telko zapiski wobsahuje kaž su špalty w array_2d.

### Přikład:

        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

Inicializuje nowu matriks na bazy nule z numeriskimi hódnotami.

### Syntaksa:

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

### Parametry:

from: Hódnota prěnjeho zapiska.

uptp: Posledni zapisk njeměł UpTo překročić.

bystep: Diferenca mjez dwěmaj na so sćěhowacymaj zapiskomaj (standard = 1).

### Přikład:

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

## Reverse

Wróći nawopačnu jednodimensionalnu zapodawansku matriks.

### Syntaksa:

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

### Parametry:

array_1d: Matriks, kotraž so wobroćić.

### Přikład:

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

## Shuffle

Wróći připadnu permutaciju jednodimensionalneje matriksy.

### Syntaksa:

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

### Parametry:

array_1d: Matriks, kotraž so ma přeměšeć.

### Přikład:

        Dim a As Variant
        a = SF_Array.Shuffle(Array(1, 2, 3, 4))
            ' Matriks "a" je nětko w připadnym porjedźe, na př. (2. 3, 1, 4)

## Slice

Wróći podsadźbu jednodimensionalneje matriksy.

### Syntaksa:

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

### Parametry:

array_1d: Matriks, kotraž so ma dźělić.

from: Delni indeks w array_1d podmatriksy, kontraž so ma ekstrahować (from zapřijaty)

upto: Horni indeks w array_1d podmatriksy, kotraž so ma ekstrahować (upto zapřijaty). Standardna hódnota je hornja mjeza array_1d. Jeli upto < from , je wróćena matriks prózdna.

### Přikład:

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

## Sort

Sortěruje jednodimensionalnu matriks w postupowacym abo spadowacym porjedźe. Tekstowe přirunanja móža na wulkopisanje dźiwać abo nic.
Matriks dyrbi homogenje wupjelnjena być, to rěka, zo zapiski dyrbja skalary samsneho typa być.
Zapiski Empty a Null su dowolene. Po zwučenym wašnju je Empty < Null < někajka druha skalarowa hódnota.

### Syntaksa:

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

### Parametry:

array_1d: Matriks, kotraž so ma sortěrować.

sortorder: Móže pak "ASC" (standard) pak "DESC" być.

casesensitive: Jenož za přirunanja znamješkowych rjećazkow (standard = false).

### Přikład:

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

## SortColumns

Wróći permutaciju špaltow dwudimensionalneje matriksy, sortěrowane po hódnotami dateje linki.
Linka dyrbi homogenje wupjelnjena być, to rěka, zo wšě zapiski dyrbja skalary samsneho typa być.
Zapiski Empty a Null su dowolene. Po zwučenym wašnju je Empty < Null < někajka druha skalarowa hódnota.

### Syntaksa:

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

### Parametry:

array_2d: Dwudimensionalna matriks, kotraž so ma sortěrować.

rowindex: Indeks linki, kotraž budźe so jako referenca za sortěrowanje špaltow wužiwać.

sortorder: Móže pak "ASC" (standard) pak "DESC" być.

casesensitive: Jenož za přirunanja znamješkowych rjećazkow (standard = false).

### Přikład:

        ' 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

Wróći permutaciju linkow dwudimensionalneje matriksy, sortěrowane po hódnotami dateje špalty.
Špalta dyrbi homogenje wupjelnjena być, to rěka, zo wšě zapiski dyrbja skalary samsneho typa być.
Zapiski Empty a Null su dowolene. Po zwučenym wašnju je Empty < Null < někajka druha skalarowa hódnota.

### Syntaksa:

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

### Parametry:

array_2d: Matriks, kotraž so ma sortěrować.

columnindex: Indeks špalty, kotraž budźe so jako referenca za sortěrowanje linkow wužiwać.

sortorder: Móže pak "ASC" (standard) pak "DESC" być.

casesensitive: Jenož za přirunanja znamješkowych rjećazkow (standard = false).

### Přikład:

        ' 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

Wuměnja linki a špalty w dwudimensionalnej matriksy.

### Syntaksa:

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

### Parametry:

array_2d: Dwudimensionalna matriks, kotraž so ma transponować.

### Přikład:

        ' 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

Wotstronja wšě zapiski Null, Empty a zapiski z dołhosću nul z jednodimensionalneje matriksy.
Zapiski znamješkowych rjećazkow so z funkciju LibreOfficeDev Basic Trim() přirězuja.

### Syntaksa:

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

### Parametry:

array_1d: Matriks, kotraž so ma přirězać.

### Přikład:

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

## Union

Wutworja sadźbu jako matriks na bazy nula přez to, zo zjednoćenski operator na dwě zapodawanskej matriksy nałožuje. Rezultowace zapiski z wobeju matriksow pochadźeja.
Rezultowaca matriks so w postupowacym porjedźe sortěruje.
Wobě zapodawanskej matriksy dyrbitej homogenje wupjelnenej być, jeju zapiski dyrbja skalary samsneho typa być. ZapiskiEmpty a Null su zakazane.
Tekstowe přirunanje móže na wulkopisanje dźiwać abo nic.

### Syntaksa:

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

### Parametry:

array1_1d: Prěnja zapodawanska matriks.

array2_1d: Druha zapodawanska matriks.

casesensitive: Jenož nałožujomny, jeli matriksy su ze znamješkowymi rjećazkami wupjelnjene (standard = false).

### Přikład:

        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

Wutworja sadźbu jónkróćnych hódnotow, kotrež su wot zapodawanskeje matriksy wotwodźene.
Zapodawanska matriks dyrbi homogenje wupjelnjene być, jeje zapiski dyrbja skalary samsneho typa być. Zapiski Empty a Null su zakazane.
Tekstowe přirunanja móža na wulkopisanje dźiwać abo nic.

### Syntaksa:

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

### Parametry:

array_1d: Zapodawanska matriks.

casesensitive: Jenož nałožujomny, jeli matriks je ze znamješkowymi rjećazkami wupjelnjena (standard = false).

### Přikład:

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

Wšě rutiny Basic ScriptForge abo identifikatory, kotrež so z podsmužku „_“ započinaja, su za interne wužiwanje wuměnjene. Njejsu za to myslene, so w makrach Basic abo skriptach Python wužiwać.

Podobne temy

Array Functions

Using Calc Functions in Macros

Słužba ScriptForge.Dictionary

Prošu podpěrajće nas!