Storitev ScriptForge.Array (SF_Array)

Vsebina

# Storitev ScriptForge.Array

Ponuja zbirko metod za ravnanje z in preoblikovanje enodimenzionalnih polj (vektorjev) in dvodimenzionalnih polj (matrik). To vključuje operacije nad množicami, razvrščanje ter uvažanje in izvažanje besedilnih datotek.

Polj z več kot dvema dimenzijama ni možno uporabljati z metodami te storitve, edina izjema je metoda CountDims, ki sprejema polja poljubnih dimenzij.

Elementi polja so lahko vrednosti poljubne vrste, vključno s (pod)polji.

Enodimenzionalna polja, ki vsebujejo samo enodimenzionalna podpolja, so v nadaljevanju poimenovana podatkovna polja. Posebej primerna so za izmenjavo tabuliranih podatkov s skripti Python in delovnimi listi Calc.

## Priklic storitve

Pred uporabo storitve Array je potrebno naložiti knjižnico ScriptForge:

        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

Z nalaganjem knjižnice ustvarite predmet SF_Array, ki ga lahko uporabite za klicanje metod v storitvi Array.

Naslednji odlomki kode kažejo različne načina klica metod storitve Array (metoda Append služi kot primer):

        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)

Python ima vgrajeno podporo za sezname in n-terice, zato je večina metod iz storitve Array na voljo le za skripte Basic. Edina izjema je ImportFromCSVFile, ki je podprta tako v Basicu kot Pythonu.

Seznam metod v storitvi 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

Prvi argument večine metod je predmet polja, ki bo obravnavan. Vedno je podan s sklicem in se ne spreminja. Metode, kot so Append, Prepend itn. po izvedbi vrnejo nov predmet polja.

## Append

Doda elemente, navedene kot argumente, na konec vhodnega polja.

### Skladnja:

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

### Parametri:

array_1d: predobstoječa matrika, lahko je prazna.

arg0, arg1, ...: seznam elementov, ki jih želite pripeti polju array_1d.

### Primer:

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

## AppendColumn

Doda nov stolpec na desno stran dvodimenzionalnega polja. Končno polje ima enako spodnjo mejo kot začetno dvodimenzionalno polje.

### Skladnja:

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

### Parametri:

array_2d: predobstoječa matrika, lahko je prazna. Če ima to polje samo eno dimenzijo, velja kot prvi stolpec rezultatskega dvodimenzionalnega polja.

column: 1-dimenzionalno polje s toliko elementi, kolikor je vrstic v array_2d.

### Primer:

        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

Doda novo vrstico na dno dvodimenzionalnega polja. Končno polje ima enako spodnjo mejo kot začetno dvodimenzionalno polje.

### Skladnja:

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

### Parametri:

array_2d: predobstoječa matrika, lahko je prazna. Če je to polje enodimenzionalno, šteje za prvo vrstico ciljnega dvodimenzionalnega polja.

row: 1-dimenzionalno polje s toliko elementi, kolikor je stolpcev v array_2d.

### Primer:

        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

Preveri, če enodimenzionalno polje vsebuje določeno število, besedilo ali datum. Primerjava besedil lahko razlikuje med velikimi in malimi črkami ali pa ne.
Vhodna razvrščena polja morajo biti zapolnjena homogeno, kar pomeni, da morajo biti vsi njihovi elementi skalarji iste vrste (elementa Empty in Null sta prepovedana).
Rezultat metode je nepredvidljiv, če je polje razglašeno za razvrščeno, pa dejansko ni.
Dvojiško iskanje se izvee, ko je polje razvrščeno, sicer se preprosto preišče od vrha do dna, elementi Empty in Null pa so prezrti.

### Skladnja:

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

### Parametri:

array_1d: polje za pregled.

tofind: iskano število, datum ali niz.

casesensitive: razločevanje med malimi in velikimi črkami, le za primerjavo nizov (privzeta vrednost je False).

sortorder: vrstni red razvrščanja, možne vrednosti so "ASC" (naraščajoče), "DESC" (padajoče) in "" (nerazvrščeno, privzeta vrednost).

### Primer:

        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

Pretvorite podatkovno polje v polje Basic.
Podatkovno polje je polje podpolj. Na zahtevo so posamezni izhodni elementi reducirani na nize ali samo doubles/pare/števila s plavajočo vejico z dvojno natančnostjo.

Metoda vrne skalar, ničelno osnovano enodimenzionalno polje ali ničelno osnovano dvodimenzionalno polje.
Število stolpcev v rezultatnem dvodimenzionalnem polju je enako številu elementov v prvem podpolju. Če so naslednja podpolja različne velikosti, bodo naslednje vrstice komplementirane z argumentom fillvalue ali porezane.

### Skladnja:

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

### Parametri:

dataarray: polje podpolj. Polja in podpolja morajo biti na ničelni osnovi.
Tipično je podatkovno polje izhod

- metode session.ExecuteCalcFunction()

- skripta v Pyhonu, ki vrne n-terico n-teric

- metoda getDataArray() iz vmesnika com.sun.star.sheet.XCellRangeData

isrange: če je True (privzeta vrednost je False), se vsi elementi pretvorijo v nize ali doubles/pare/števila plavajoče vejice z dvojno natančnostjo.

fillvalue: kako nadomestiti manjkajoče elemente. Privzeta vrednost je prazen niz.

### Primer:

        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

Ustvarite podatkovno polje iz skalarja, enodimenzionalnega polja ali dvodimenzionalnega polja.
Podatkovno polje je ničelno osnovano polje ničelno zasnovanih podpolj. Na zahtevo so posamezni izhodni elementi reducirani na zgolj nize ali števila z dvojno natančnostjo.

Vrnjeno podatkovno polje je običajno uporabljeno kot

- n-terica (pod)n-teric, podanih skriptu Python

- argument metode setDataArray() iz vmesnika com.sun.star.sheet.XCellRangeData

### Skladnja:

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

### Parametri:

data: vhodni skalar, 1- ali 2-dimenzionalna matrika.

isrange: če je True (privzeta vrednost je False), so elementi polja shranjeni samo kot (morda prazni) nizi ali pari/števila plavajoče vejice z dvojno natančnostjo v podatkovnem polju.

rows, columns: število vrstic ali stolpcev vrnjenega podatkovnega polja. Če presegajo meje data, se zapolnijo z nizi ničelne dolžine. Če je rows = 1 in je vhodno polje vektor, se podatkovno polje poravna vodoravno (privzeto so vektorji poravnani navpično). Če manjka, velikost izhoda določa vhodno polje.

### Primer:

        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

Shrani vsebino dvostolpčnega polja v predmet ScriptForge.Dictionary.
Ključ bo izluščen iz prvega stolpca, element iz drugega.

### Skladnja:

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

### Parametri:

array_2d: podatki, ki bodo pretvorjeni v predmet ScriptForge.Dictionary.

- Prvi stolpec mora vsebovati izključno nize dolžine večje od nič, v poljubnem zaporedju. Te vrednosti bodo uporabljene kot oznake v slovarju.

- Drugi stolpec vsebuje podatke, ki bodo povezani z ustrezno oznako v slovarju.

### Primer:

        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

Ustvarite vsebino veljavnega obsega celic iz skalarja, enodimenzionalnega polja, dvodimenzionalnega polja ali podatkovnega polja (podatkovno polje je ničelno osnovano polje ničelno osnovanih podpolj). Nižje meje polj se ohranijo v izhodu.

Posamezni elementi so vedno reducirani na nize ali pare/števila plavajoče vejice z dvojno natančnostjo, vključno z logičnimi vrednostmi in datumi.

Vrnjeni skalar ali dvodimenzionalno polje je veljaven argument metode session.ExecuteCalcFunction(). To je še posebej uporabno v kontekstu [kompleksnih] matričnih funkcij.

### Skladnja:

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

### Parametri:

data: vhodni skalar, eno-, dvodimenzionalno polje ali podatkovno polje.

direction: poravnava obsega, ko gre za vektor, možne vrednosti so "V" (navpično, privzeto) ali "H" (vodoravno).

### Primer:

        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

Ustvari kopijo eno- ali dvodimenzionalnega polja.

### Skladnja:

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

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

### Parametri:

array_nd: eno- ali dvodimenzionalno polje, ki ga želite kopirati.

### Primer:

Enostavna dodelitev predmeta Array kopira njegov sklic namesto ustvarjanja kopije vsebine predmeta. Glejte spodnji primer:

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Spodnja dodelitev se opravi s sklicem
        b = a
        ' Zato sprememba vrednosti v "b" povzroči spremembo tudi v "a"
        b(0) = 10
        MsgBox a(0) ' 10

Z rabo metode Copy se izdela kopija celotnega predmeta Array. V spodnjem primeru sta a in b različna predmeta; sprememba vrednosti v b ne vpliva na vrednosti v a.

        Dim a as Variant, b as Variant
        a = Array(1, 2, 3)
        ' Ustvari kopijo "a" z metodo "Copy"
        b = SF_Array.Copy(a)
        b(0) = 10
        MsgBox a(0) ' 1

## CountDims

Preštej število dimenzij matrike. Rezultat je lahko večji od dva.
Če argument ni matrika, vrne -1.
Če matrika ni inicializirana, vrne 0.

### Skladnja:

svc.CountDims(array_nd: any): int

### Parametri:

array_nd: polje za preučevanje.

### Primer:

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

## Difference

Tvori množico, kot ničelno polje, tako da izvede operacijo razlike na obeh vhodnih poljih. Elementi rezultata izvirajo iz prvega polja, ne iz drugega.
Polje rezultata je razvrščeno v naraščajočem vrstnem redu.
Obe vhodni polji morata biti homogeno zapolnjeni, kar pomeni, da morajo biti vsi njuni elementi skalarji iste vrste. Elementa Empty in Null sta prepovedana.
Primerjava besedil lahko razlikuje med velikimi in malimi črkami ali pa ne.

### Skladnja:

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

### Parametri:

array1_1d: enodimenzionalno referenčno polje, katerega elemente pregledujemo za odstranitev.

array2_1d: enodimenzionalno polje, katerega elementi se odštevajo od prvega vhodnega polja.

casesensitive: ta argument bo upoštevan samo takrat, ko so polja izpolnjena z nizi (privzeta vrednost je False).

### Primer:

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

## ExportToTextFile

Zapiši vse elemente polja zaporedno v besedilno datoteko. Če datoteka že obstaja, bo prepisana brez opozorila.

### Skladnja:

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

### Parametri:

array_1d: matrika za izvoz. Vsebovati mora zgolj nize.

filename: ime besedilne datoteke, kamor želite pisati podatke. Ime mora biti izraženo v skladu s trenutno lastnostjo FileNaming storitve SF_FileSystem.

encoding: nabor znakov, ki naj bo uporabljen. Uporabi eno od imen, navedenih v naborih znakov IANA (v angl. jeziku). Upoštevajte, da LibreOffice morda ne podpira vseh obstoječih naborov znakov (privzeta vrednost je »UTF-8«).

### Primer:

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

## ExtractColumn

Izveleč določen stolpec iz dvodimenzionalnega polja kot novo polje.
Njeni spodnja meja LBound in zgornja meja UBound sta identični mejam prve razsežnosti vhodnega polja.

### Skladnja:

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

### Parametri:

array_2d: polje, iz katerega želite izvleči podatke.

columnindex: številka stolpca, ki ga želite izvleči – mora biti v intervalu [LBound, UBound].

### Primer:

        'Ustvari polje 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))
        'Izvleče tretji stolpec: |3, 6, 9|
        col = SF_Array.ExtractColumn(mat, 2)

## ExtractRow

Izloči določeno vrstico iz dvodimenzionalnega polja kot novo polje.
Njeni spodnja meja LBound in zgornja meja UBound sta identični mejam druge razsežnosti vhodnega polja.

### Skladnja:

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

### Parametri:

array_2d: polje, iz katerega želite izvleči podatke.

rowindex: številka vrstice, ki jo želite izvleči – mora biti v intervalu [LBound, UBound].

### Primer:

        'Ustvari polje 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))
        'Izvleče prvo vrstico: |1, 2, 3|
        row = SF_Array.ExtractRow(mat, 0)

## Flatten

Zloži vse posamezne elemente polja in vse elemente njenih podpolj v eno samo novo polje brez podpolj. Prazna podpolja so prezrta in podpolja več kot ene dimenzije niso sploščena.

### Skladnja:

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

### Parametri:

array_1d: predobstoječa matrika, lahko je prazna.

### Primer:

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

Metodo Flatten lahko uporabite z drugimi metodami, kot sta Append in Prepend, da spojite množico enodimenzionalnih polj v eno samo enodimenzionalno polje.

### Primer:

Sledi primer, kako lahko kombinirate metodi Flatten in Append, da spojite tri polja.

        'Ustvari tri polja za ta primer
        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)
        'Poveže oz. spoji tri polja v eno samo enodimenzionalno polje
        Dim arr as Variant
        arr = SF_Array.Flatten(SF_Array.Append(a, b, c))
        '(1, 2, 3, 4, 5, 6, 7, 8, 9)

## ImportFromCSVFile

Uvozi podatke, vsebovane v datoteki, ločeni z vejicami (CSV). Vejico lahko zamenja poljuben znak.

Uporabljeni zapis CSV je podrobno opisan na strani IETF Common Format and MIME Type for CSV Files (v angl.).

Vsaka vrstica v datoteki vsebuje poln zapis (deljenje vrstic ni dovoljeno).
Zaporedja \n, \t itn. pa ostanejo nespremenjena. Uporabite metodo SF_String.Unescape() za njihovo upravljanje.

Metoda vrne dvodimenzionalno polje, katerega vrstice ustrezajo posameznim zapisom, prebranim iz datoteke, in katerega stolpci ustrezajo poljem v zapisih. Pri tem se ne izvede preverjanje o koherentnosti vrst polj po stolpcih. Opravljena bo presoja za identifikacijo številskih in datumskih vrst.

Če vrstica vsebuje manj ali več polj kot prva vrstica v datoteki, prikliče izjemo. Prazne vrstice pa so enostavno prezrte. Če velikost datoteke presega mejno število elementov (glejte kodo), javi napako in polje je okrajšano.

### Skladnja:

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

### Parametri:

filename: ime besedilne datoteke, ki vsebuje podatke. Ime je izraženo skladno s trenutno lastnostjo FileNaming storitve SF_FileSystem.

delimiter: posamezen znak kot ločilo, običajno vejica, podpičje ali tabulator (privzeto je ",").

dateformat: datume obravnava poseben mehanizem, ko je oblika datuma dateformat ena od vrednosti "YYYY-MM-DD", "DD-MM-YYYY" ali "MM-DD-YYYY". Pomišljaj (-) lahko zamenjate s piko (.), poševnico (/) ali presledkom. Druge oblike datuma bodo prezrte. Datumi s privzeto vrednostjo praznega niza ("") veljajo za navadno besedilo.

### Primer:

Vzemimo besedilno datoteko »myFile.csv« z naslednjo vsebino:

Ime,DatumRojstva,Naslov,Kraj

Anna,2002/03/31,"Rue de l'église, 21",Toulouse

Fred,1998/05/04,"Rue Albert Einstein, 113A",Carcassonne

Spodnja primera v Basicu in Pythonu prebereta vsebino datoteko CSV v predmet Array.

##### V Basicu

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

##### V Pythonu

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

## IndexOf

V enodimenzionalnem polju poiščite število, niz ali datum. Primerjava besedil lahko razlikuje med velikimi in malimi črkami ali pa ne.
Če je polje razvrščeno, mora biti zapolnjeno homogeno, kar pomeni, da morajo biti vsi njegovi elementi skalarji iste vrste (elementa Empty in Null sta prepovedana).
Rezultat metode je nepredvidljiv, če je polje razglašeno za razvrščeno, pa dejansko ni.
V razvrščenih poljih se izvede dvojiško iskanje. Sicer se polja enostavno pregleda od vrha do dna in elementi Empty in Null so prezrti.
Ta metoda vrne LBound(input array) - 1, če iskanje ni bilo uspešno.

### Skladnja:

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

### Parametri:

array_1d: polje za pregled.

tofind: iskano število, datum ali niz.

casesensitive: razločevanje med malimi in velikimi črkami, le za primerjavo nizov (privzeta vrednost je False).

sortorder: vrstni red razvrščanja, možne vrednosti so "ASC" (naraščajoče), "DESC" (padajoče) in "" (nerazvrščeno, privzeta vrednost).

### Primer:

        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

Elemente, nanizane kot argumente, vstavi v vhodno polje pred danim indeksom.
Argumenti so naključno vstavljeni. Vsak izmed njih je lahko skalar ali poljubna vrsta podpolja.

### Skladnja:

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

### Parametri:

array_1d: predobstoječa matrika, lahko je prazna.

before: indeks elementa, pred katerim želimo vstavljati; mora biti v intervalu [LBound, UBound + 1].

arg0, arg2, ...: seznam elementov za vstavljanje v polje array_1d.

### Primer:

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

## InsertSorted

Na njemu ustrezno mesto v razvrščeno polje vstavi nov element.
Polje mora biti homogeno zapolnjeno, kar pomeni, da morajo biti vsi njegovi elementi skalarji iste vrste.
Elementa Empty in Null sta prepovedana.

### Skladnja:

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

### Parametri:

array_1d: polje, v katerega bo vstavljena vrednost.

item: skalarna vrednost za vstavljanje, iste vrste kot obstoječi elementi polja.

sortorder: vrstni red razvrščanja, možni vrednosti sta "ASC" (naraščajoče, privzeto) in "DESC" (padajoče).

casesensitive: razločevanje med malimi in velikimi črkami, le za primerjavo nizov (privzeta vrednost je False).

### Primer:

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

## Intersection

Tvori množico, kot ničelno polje, tako da izvede operacijo preseka na obeh vhodnih poljih. Elementi rezultata se nahajajo v obeh poljih.
Polje rezultata je razvrščeno v naraščajočem vrstnem redu.
Obe vhodni polji morata biti homogeno zapolnjeni, kar pomeni, da morajo biti vsi njuni elementi skalarji iste vrste. Elementa Empty in Null sta prepovedana.
Primerjava besedil lahko razlikuje med velikimi in malimi črkami ali pa ne.

### Skladnja:

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

### Parametri:

array1_1d: prvo vhodno polje.

array2_1d: drugo vhodno polje.

CaseSensitive: razločevanje med malimi in velikimi črkami; velja za polja, zapolnjena z besedilnimi elementi (privzeta vrednost je False).

### Primer:

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

## Join2D

Združi dvodimenzionalno polje z dvema ločiloma: prvim za stolpce, drugim za vrstice.

### Skladnja:

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

### Parametri:

array_2d: dvodimenzionalno polje, vsak njegov element mora biti besedilo, število, datum ali logična vrednost.
Datumi se pretvorijo v obliko LLLL-MM-DD uu:mm:ss.
Neveljavne elemente zamenja niz ničelne dolžine.

columndelimiter: ločilo med stolpci (privzeta vrednost je tabulator/Chr(9)).

rowdelimiter: ločilo med vrsticami (privzeta vrednost je LineFeed/Chr(10))

quote: če je True, zaščiti nize z dvojnimi narekovaji. Privzeta vrednost je False.

### Primer:

        ' 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

Elemente, nanizane kot argumente, vstavi na začetek vhodnega polja.

### Skladnja:

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

### Parametri:

array_1d: predobstoječa matrika, lahko je prazna.

arg0, arg1, ...: seznam elementov, ki jih želite pripeti na začetek polja array_1d.

### Primer:

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

## PrependColumn

Pripne nov stolpec na levo stran dvodimenzionalnega polja. Končno polje ima enako spodnjo mejo kot začetno dvodimenzionalno polje.

### Skladnja:

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

### Parametri:

array_2d: predobstoječa matrika, lahko je prazna. Če je to polje enodimenzionalno, šteje za zadnji stolpec ciljnega dvodimenzionalnega polja.

column: 1-dimenzionalno polje s toliko elementi, kolikor je vrstic v array_2d.

### Primer:

        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

Doda novo vrstico na začetek dvodimenzionalnega polja. Končno polje ima enako spodnjo mejo kot začetno dvodimenzionalno polje.

### Skladnja:

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

### Parametri:

array_2d: predobstoječa matrika, lahko je prazna. Če je to polje enodimenzionalno, šteje za zadnjo vrstico ciljnega dvodimenzionalnega polja.

row: enodimenzionalno polje s toliko elementi, kolikor je vrstic v array_2d.

### Primer:

        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

Inicializira novo ničelno polje s številskimi vrednostmi.

### Skladnja:

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

### Parametri:

from: vrednost prvega elementa.

upto: zadnji element naj ne presega vrednosti UpTo.

bystep: razlika med dvema zaporednima elementoma (privzeto = 1).

### Primer:

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

## Reverse

Vrne preobrnjeno enodimenzionalno vhodno matriko.

### Skladnja:

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

### Parametri:

array_1d: polje, ki ga želimo preobrniti.

### Primer:

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

## Shuffle

Vrne poljubno permutacijo enodimenzionalnega polja.

### Skladnja:

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

### Parametri:

array_1d: polje, ki ga želimo premešati.

### Primer:

        Dim a As Variant
        a = SF_Array.Shuffle(Array(1, 2, 3, 4))
            ' Polje "a" je zdaj v naključnem zaporedju, npr. (2, 3, 1, 4)

## Slice

Vrne podmnožico enodimenzionalnega polja.

### Skladnja:

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

### Parametri:

array_1d: polje, ki ga želite razrezati.

from: spodnji indeks v array_1d podpolja za izvlečenje (vključno s from).

upto: zgornji indeks array_1d podpolja za izvlečenje (vključno z upto). Privzeta vrednost je zgornja meja array_1d. Če je upto < from, bo vrnjeno polje prazno.

### Primer:

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

## Sort

Razvrsti enodimenzionalno polje po naraščajočem ali padajočem vrstnem redu. Primerjava besedil lahko razlikuje med velikimi in malimi črkami ali pa ne.
Polje mora biti homogeno zapolnjeno, kar pomeni, da morajo biti vsi njegovi elementi skalarji iste vrste.
Elementa Empty in Null sta dovoljena. Običajno velja: Empty < Null < poljubna druga skalarna vrednost.

### Skladnja:

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

### Parametri:

array_1d: polje za razvrščanje.

sortorder: vrstni red razvrščanja, možni vrednosti sta "ASC" (naraščajoče, privzeto) in "DESC" (padajoče).

casesensitive: razločevanje med malimi in velikimi črkami, le za primerjavo nizov (privzeta vrednost je False).

### Primer:

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

## SortColumns

Vrne permutacijo stolpcev v dvodimenzionalnem polju, razvščenih po vrednostih v podani vrstici.
Vrstica mora biti homogeno zapolnjena, kar pomeni, da morajo biti vsi njeni elementi skalarji iste vrste.
Elementa Empty in Null sta dovoljena. Običajno velja: Empty < Null < poljubna druga skalarna vrednost.

### Skladnja:

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

### Parametri:

array_2d: dvodimenzionalno polje za razvrščanje.

rowindex: indeks vrstice, glede na katero bodo razvrščeni stolpci.

sortorder: vrstni red razvrščanja, možni vrednosti sta "ASC" (naraščajoče, privzeto) in "DESC" (padajoče).

casesensitive: razločevanje med malimi in velikimi črkami, le za primerjavo nizov (privzeta vrednost je False).

### Primer:

        ' 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

Vrne permutacijo vrstic v dvodimenzionalnem polju, razvščenih po vrednostih v podanem stolpcu.
Stolpec mora biti homogeno zapolnjen, kar pomeni, da morajo biti vsi njegovi elementi skalarji iste vrste.
Elementa Empty in Null sta dovoljena. Običajno velja: Empty < Null < poljubna druga skalarna vrednost.

### Skladnja:

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

### Parametri:

array_2d: polje za razvrščanje.

columnindex: indeks stolpca, glede na katerega bodo razvrščene vrstice.

sortorder: vrstni red razvrščanja, možni vrednosti sta "ASC" (naraščajoče, privzeto) in "DESC" (padajoče).

casesensitive: razločevanje med malimi in velikimi črkami, le za primerjavo nizov (privzeta vrednost je False).

### Primer:

        ' 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

Zamenja vrstice in stolpce v dvodimenzionalnem polju.

### Skladnja:

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

### Parametri:

array_2d: dvodimenzionalno polje za transponiranje.

### Primer:

        ' 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

Iz enodimenzionalnega polja odstrani vse vnose Null in Empty ter vnose ničelne dolžine.
Nizi so okrajšani s funkcijo LibreOffice Basic Trim().

### Skladnja:

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

### Parametri:

array_1d: polje za obrezavo.

### Primer:

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

## Union

Tvori množico, kot ničelno polje, tako da izvede operacijo unije na obeh vhodnih poljih. Elementi rezultata izvirajo iz poljubnega od obeh polj.
Polje rezultata je razvrščeno v naraščajočem vrstnem redu.
Obe vhodni polji morata biti homogeno zapolnjeni, kar pomeni, da morajo biti vsi njuni elementi skalarji iste vrste. Elementa Empty in Null sta prepovedana.
Primerjava besedil lahko razlikuje med velikimi in malimi črkami ali pa ne.

### Skladnja:

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

### Parametri:

array1_1d: prvo vhodno polje.

array2_1d: drugo vhodno polje.

casesensitive: samo če so polja izpolnjena z nizi (privzeta vrednost je False).

### Primer:

        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

Sestavite množico enkratnih vrednosti, ki izhajajo iz vhodnega polja.
Vhodno polje mora biti homogeno zapolnjeno, kar pomeni, da morajo biti vsi njegovi elementi skalarji iste vrste. Elementa Empty in Null sta prepovedana.
Primerjava besedil lahko razlikuje med velikimi in malimi črkami ali pa ne.

### Skladnja:

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

### Parametri:

array_1d: vhodna matrika.

casesensitive: samo če so polja izpolnjena z nizi (privzeta vrednost je False).

### Primer:

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

Vsi podprogrami ali identifikatorji ScriptForge Basic s predpono podčrtaja (»_«) so rezervirani za interno uporabo. Uporabi v makrih Basic ali skriptih Python niso namenjeni.

Podobne teme

Funkcije za matrike

Raba funkcij programa Calc v makrih

Storitev ScriptForge.Dictionary

Podprite nas!