Pomoc LibreOffice 7.5
Udostępnia zbiór metod służących do manipulowania i przekształcania tablic jednego wymiaru (wektorów) i tablic dwuwymiarowych (macierzy). Obejmuje to operacje na zestawach, sortowanie, importowanie i eksportowanie do plików tekstowych.
Tablice o więcej niż dwóch wymiarach nie mogą być używane z metodami w tej usłudze, jedynym wyjątkiem jest metoda CountDims, która akceptuje tablice o dowolnej liczbie wymiarów.
Elementy tablicy mogą zawierać dowolny typ wartości, w tym (pod)tablice.
Przed użyciem usługi Array należy załadować bibliotekę ScriptForge z:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
Załadowanie biblioteki spowoduje utworzenie obiektu SF_Array, który można użyć do wywołania metod w usłudze Array.
Poniższe fragmenty kodu przedstawiają różne sposoby wywoływania metod w usłudze Array (jako przykładu użyto metody Append):
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)
Ponieważ Python ma wbudowaną obsługę list i krotek, większość metod w usłudze Array jest dostępna tylko dla skryptów Basic. Jedynym wyjątkiem jest ImportFromCSVFile, który jest obsługiwany zarówno w języku Basic, jak i Python.
Pierwszym argumentem większości metod jest obiekt tablicy, który należy wziąć pod uwagę. Zawsze jest przekazywany przez referencję i pozostawiany bez zmian. Metody takie jak Append, Prepend itp. zwracają po wykonaniu nowy obiekt tablicy.
Dołącza elementy wymienione jako argumenty na końcu tablicy wejściowej.
svc.Append(array_1d: any[0..*], arg0: any, [arg1: any] ...): any[0..*]
array_1d: istniejąca tablica może być pusta.
arg0, arg1, ...: elementy, które zostaną dołączone do array_1d.
Dim a As Variant
a = SF_Array.Append(Array(1, 2, 3), 4, 5)
' (1, 2, 3, 4, 5)
Dołącza nową kolumnę po prawej stronie tablicy dwuwymiarowej. Otrzymana tablica ma takie same dolne granice jak początkowa tablica dwuwymiarowa.
svc.AppendColumn(array_2d: any[0..*, 0..*], column: any[0..*]): any[0..*, 0..*]
array_2d: istniejąca wcześniej tablica może być pusta. Jeśli ta tablica ma tylko jeden wymiar, jest uważana za pierwszą kolumnę wynikowej tablicy dwuwymiarowej.
column: jednowymiarowa tablica zawierająca tyle elementów, ile jest wierszy w array_2d.
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
Dołącz nowy wiersz na dole dwuwymiarowej tablicy. Otrzymana tablica ma takie same dolne granice jak początkowa tablica dwuwymiarowa.
svc.AppendRow(array_2d: any[0..*, 0..*], row: any[0..*]): any[0..*, 0..*])
array_2d: istniejąca wcześniej tablica może być pusta. Jeśli ta tablica ma 1 wymiar, jest traktowana jako pierwszy wiersz wynikowej tablicy dwuwymiarowej.
row: jednowymiarowa tablica zawierająca tyle elementów, ile jest kolumn w array_2d.
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
Sprawdź, czy jednowymiarowa tablica zawiera określoną liczbę, tekst lub datę. Porównanie tekstu może uwzględniać wielkość liter lub nie.
Posortowane tablice wejściowe muszą być wypełnione jednorodnie, co oznacza, że wszystkie elementy muszą być skalarami tego samego typu (elementy Empty i Null są zabronione).
Rezultat metody jest nieprzewidywalny, gdy tablica jest ogłoszona jako posortowana, aw rzeczywis tości tak nie jest.
Wyszukiwanie binarne jest wykonywane, gdy tablica jest sortowana, w przeciwnym razie jest po prostu skanowana od góry do dołu, a elementy Empty i Null są ignorowane.
svc.Contains(array_1d: any[0..*], tofind: any, casesensitive: bool = False, sortorder: str = ""): bool
array_1d: tablica do przeskanowania.
tofind: liczba, data lub ciąg znaków do znalezienia.
casesensitive: tylko dla porównań ciągów znaków (domyślnie = False).
sortorder: może to być "ASC", "DESC" lub "" (bez sortowania). Wartość domyślna to "".
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
Przechowuj zawartość dwukolumnowej tablicy w obiekcie ScriptForge.Dictionary.
Klucz zostanie wyodrębniony z pierwszej kolumny, element z drugiej.
svc.ConvertToDictionary(array_2d: any[0..*, 0..1]): obj
array_2d: dane do przekonwertowania na obiekt ScriptForge.Dictionary.
Pierwsza kolumna musi zawierać wyłącznie łańcuchy o długości większej od zera, w dowolnej kolejności. Te wartości będą używane jako etykiety w słowniku.
Druga kolumna zawiera dane, które zostaną skojarzone z odpowiednią etykietą w słowniku.
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
Tworzy kopię jednowymiarowej lub dwuwymiarowej tablicy.
svc.Copy(array_nd: any[0..*]): any[0..*]
svc.Copy(array_nd: any[0..*, 0..*]): any[0..*, 0..*]
array_nd: jednowymiarowa lub dwuwymiarowa tablica do skopiowania.
Proste przypisanie obiektu Array spowoduje skopiowanie jego odwołania zamiast tworzenia kopii zawartości obiektu. Zobacz przykład poniżej:
Dim a as Variant, b as Variant
a = Array(1, 2, 3)
' Poniższe zadanie zostało wykonane przez odniesienie
b = a
' Dlatego zmiana wartości w "b" zmieni również "a"
b(0) = 10
MsgBox a(0) ' 10
Za pomocą metody Copy tworzona jest kopia całego obiektu Array. W poniższym przykładzie a i b to różne obiekty, a zmiana wartości w b nie wpłynie na wartości w a.
Dim a as Variant, b as Variant
a = Array(1, 2, 3)
' Tworzy kopię "a" przy użyciu metody "Copy".
b = SF_Array.Copy(a)
b(0) = 10
MsgBox a(0) ' 1
Policz liczbę wymiarów tablicy. Wynik może być większy niż dwa.
Jeśli argument nie jest tablicą, zwraca -1
Jeśli tablica nie jest zainicjowana, zwraca 0.
svc.CountDims(array_nd: any): int
array_nd: tablica do sprawdzenia.
Dim a(1 To 10, -3 To 12, 5)
MsgBox SF_Array.CountDims(a) ' 3
Stosuje operator różnicy do dwóch tablic wejściowych, tworząc zbiór jako tablicę zaczynającą się od 0. Wynikowe elementy pochodzą z pierwszej tablicy, a nie z drugiej.
Otrzymana tablica jest sortowana w porządku rosnącym.
Obie tablice wejściowe muszą być wypełnione jednorodnie, tzn. ich wpisy muszą być skalarami tego samego typu. Wartości Empty i Null są niedozwolone.
Porównania tekstu mogą uwzględniać wielkość liter lub nie.
svc.Difference(array1_1d: any[0..*], array2_1d: any[0..*], casesensitive: bool = False): any[0..*]
array1_1d: jednowymiarowa tablica referencyjna, której elementy są sprawdzane pod kątem usunięcia.
tablica2_1d: jednowymiarowa tablica, której elementy są odejmowane od pierwszej tablicy wejściowej.
casesensitive: ten argument ma zastosowanie tylko wtedy, gdy tablice są wypełnione ciągami znaków (domyślnie = False).
Dim a As Variant
a = SF_Array.Difference(Array("A", "C", "A", "b", "B"), Array("C", "Z", "b"), True)
' ("A", "B")
Zapisz kolejno wszystkie elementy tablicy do pliku tekstowego. Jeśli plik już istnieje, zostanie nadpisany bez ostrzeżenia.
svc.ExportToTextFile(array_1d: any[0..*], filename: str, [encoding: str]): bool
array_1d: tablica do wyeksportowania. Musi zawierać tylko ciągi znaków.
filename: nazwa pliku tekstowego, w którym zostaną zapisane dane. Nazwa musi być wyrażona zgodnie z aktualną właściwością FileNaming usługi SF_FileSystem.
encoding: zestaw znaków, który powinien być używany. Użyj jednej z nazw wymienionych w zestawach znaków IANA. Należy pamiętać, że LibreOffice może nie implementować wszystkich istniejących zestawów znaków (domyślnie jest to "UTF-8").
SF_Array.ExportToTextFile(Array("A","B","C","D"), "C:\Temp\A short file.txt")
Wyodrębnij z dwuwymiarowej tablicy określoną kolumnę jako nową tablicę.
Jej dolne LBound i górne UBound granice są identyczne z pierwszym wymiarem tablicy wejściowej.
svc.ExtractColumn(array_2d: any[0..*, 0..*], columnindex: int): any[0..*, 0..*]
array_2d: tablica, z której ma zostać wyodrębniona.
columnindex: numer kolumny do wyodrębnienia – musi mieścić się w przedziale [LBound, UBound].
' Tworzy macierz 3 × 3: |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))
' Wyodrębnia trzecią kolumnę: |3, 6, 9|
col = SF_Array.ExtractColumn(mat, 2)
Wyodrębnij z dwuwymiarowej tablicy określony wiersz jako nową tablicę.
Jego dolna granica LBound i górna UBound są identyczne z granicami drugiego wymiaru tablicy wejściowej.
svc.ExtractRow(array_2d: any[0..*, 0..*], rowindex: int): any[0..*, 0..*]
array_2d: tablica, z której ma zostać wyodrębniona.
rowindex: numer wiersza do wyodrębnienia – musi mieścić się w przedziale [LBound, UBound].
' Tworzy macierz 3 × 3: |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))
' Wyodrębnia pierwszy wiersz: |1, 2, 3|
row = SF_Array.ExtractRow(mat, 0)
Ułóż wszystkie pojedyncze elementy tablicy i wszystkie elementy w jej podtablicach w jedną nową tablicę bez podtablic. Puste podtablice są ignorowane, a podtablice o liczbie wymiarów większej niż jeden nie są spłaszczane.
svc.Flatten(array_1d: any[0..*]): any[0..*]
array_1d: istniejąca tablica może być pusta.
Dim a As Variant
a = SF_Array.Flatten(Array(Array(1, 2, 3), 4, 5))
' (1, 2, 3, 4, 5)
Możesz użyć metody Flatten wraz z innymi metodami, takimi jak Append lub Prepend, aby połączyć zestaw jednowymiarowych tablic w pojedynczą tablicę jednowymiarową.
Poniżej znajduje się przykład łączenia metod Flatten i Append w celu połączenia trzech tablic.
' Tworzy trzy tablice dla tego przykładu
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)
' Łączy trzy tablice w jedną tablicę jednowymiarową
Dim arr as Variant
arr = SF_Array.Flatten(SF_Array.Append(a, b, c))
'(1, 2, 3, 4, 5, 6, 7, 8, 9)
Zaimportuj dane zawarte w pliku z wartościami rozdzielanymi przecinkami (CSV). Przecinek można zastąpić dowolnym znakiem.
Obowiązujący format CSV jest opisany w artykule IETF Common Format and MIME Type for CSV Files.
Każda linia w pliku zawiera pełny rekord (podział linii nie jest dozwolony).
Jednakże sekwencje takie jak \n, \t, ... pozostają niezmienione. Użyj metody SF_String.Unescape(), aby nimi zarządzać.
Metoda zwraca dwuwymiarową tablicę, której wiersze odpowiadają pojedynczemu rekordowi odczytanemu w pliku, a kolumny odpowiadają polu rekordu. Nie sprawdza się spójności typów pól w kolumnach. Zostanie dokonane najlepsze odgadnięcie w celu zidentyfikowania typów liczbowych i dat.
Jeśli linia zawiera mniej lub więcej pól niż pierwsza linia w pliku, zostanie zgłoszony wyjątek. Puste linie są jednak po prostu ignorowane. Jeśli rozmiar pliku przekracza limit liczby elementów (patrz wewnątrz kodu), pojawia się ostrzeżenie i tablica jest obcinana.
svc.ImportFromCSVFile(filename: str, delimiter: str = ',', dateformat: str = ''): any[0..*]
filename: nazwa pliku tekstowego zawierającego dane. Nazwa musi być wyrażona zgodnie z aktualną właściwością FileNaming usługi SF_FileSystem.
delimiter: pojedynczy znak, zazwyczaj przecinek, średnik lub znak TAB (domyślnie = ",").
dateformat: specjalny mechanizm obsługuje daty, gdy dateformat to "YYYY-MM-DD", "DD-MM-YYYY" lub "MM-DD-YYYY". Dywiz (-) można zastąpić kropką (.), ukośnikiem (/) lub spacją. Inne formaty daty będą ignorowane. Daty z domyślną wartością pustego łańcucha "" są traktowane jako zwykły tekst.
Rozważ plik CSV "myFile.csv" o następującej zawartości:
Imię,DataUrodzenia,Adres,Miasto
Anna,2002.03.31,"Dworcowa 33", Wrocław
Fryderyk,1998.05.04,"Towarowa 13",Poznań
Poniższe przykłady w językach Basic i Python wczytują zawartość pliku CSV do obiektu Array.
Dim arr As Variant
arr = SF_Array.ImportFromCSVFile("C:\Temp\myFile.csv", DateFormat := "YYYY/MM/DD")
MsgBox arr(0, 3) ' Miasto
MsgBox arr(1, 2) ' Dworcowa 33
MsgBox arr(1, 3) ' Wrocław
from scriptforge import CreateScriptService
svc = CreateScriptService("Array")
bas = CreateScriptService("Basic")
arr = svc.ImportFromCSVFile(r"C:\Temp\myFile.csv", dateformat = "YYYY/MM/DD")
bas.MsgBox(arr[0][3]) # Miasto
bas.MsgBox(arr[1][2]) # Dworcowa 33
bas.MsgBox(arr[1][3]) # Wrocław
Poszukaj w jednowymiarowej tablicy liczby, ciągu znaków lub daty. Porównanie tekstu może uwzględniać wielkość liter lub nie.
Jeśli tablica jest posortowana, musi być wypełniona jednorodnie, co oznacza, że wszystkie elementy muszą być skalarami tego samego typu (elementy Empty i Null są zabronione).
Rezultat metody jest nieprzewidywalny, gdy tablica jest ogłaszana jako posortowana, a tak naprawdę nie jest.
Wyszukiwanie binarne jest wykonywane na posortowanych tablicach. W przeciwnym razie tablice są po prostu skanowane od góry do dołu, a elementy Empty i Null są ignorowane.
Metoda zwraca LBound(input array) - 1, jeśli wyszukiwanie nie powiodło się.
svc.IndexOf(array_1d: any[0..*], tofind: any, casesensitive: bool = False, sortorder: str = ''): int
array_1d: tablica do przeskanowania.
tofind: liczba, data lub ciąg znaków do znalezienia.
casesensitive: tylko dla porównań ciągów znaków (domyślnie = False).
sortorder: może to być "ASC", "DESC" lub "" (bez sortowania). Wartość domyślna to "".
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
Wstaw przed danym indeksem tablicy wejściowej elementy wymienione jako argumenty.
Argumenty są wstawiane na ślepo. Każdy z nich może być skalarem dowolnego typu lub podtablicą.
svc.Insert(array_1d: any[0..*], before: int, arg0: any, [arg1: any] ...): any[0..*]
array_1d: istniejąca tablica może być pusta.
before: indeks, przed którym należy wstawić; musi mieścić się w przedziale [LBound, UBound + 1].
arg0, arg1, ...: elementy, które zostaną wstawione do array_1d.
Dim a As Variant
a = SF_Array.Insert(Array(1, 2, 3), 2, "a", "b")
' (1, 2, "a", "b", 3)
Wstawia do posortowanej tablicy nowy element w jego miejsce.
Tablica musi być wypełniona jednorodnie, co oznacza, że wszystkie elementy muszą być skalarami tego samego typu. Elementy
Empty i Null są zabronione.
svc.InsertSorted(array_1d: any[0..*], item: any, sortorder: str = 'ASC', casesensitive: bool = False): any[0..*]
array_1d: tablica, do której zostanie wstawiona wartość.
item: wartość skalarna do wstawienia, tego samego typu co istniejące elementy tablicy.
sortorder: może to być "ASC" (domyślnie) lub "DESC".
casesensitive: tylko dla porównań ciągów znaków (domyślnie = False).
Dim a As Variant
a = SF_Array.InsertSorted(Array("A", "C", "a", "b"), "B", CaseSensitive := True)
' ("A", "B", "C", "a", "b")
Zbuduj zbiór jako tablicę od zera, stosując operator zbioru przecięcia na dwóch tablicach wejściowych. Wynikowe elementy są zawarte w obu tablicach.
Otrzymana tablica jest sortowana w porządku rosnącym.
Obie tablice wejściowe muszą być wypełnione jednorodnie, innymi słowy wszystkie elementy muszą być skalarami tego samego typu. Elementy Empty i Null są zabronione.
Porównanie tekstu może uwzględniać wielkość liter lub nie.
svc.Intersection(array1_1d: any[0..*], array2_1d: any[0..*], casesensitive: bool = False): any[0..*]
array1_1d: pierwsza tablica wejściowa.
array2_1d: druga tablica wejściowa.
casesensitive: dotyczy tablic wypełnionych elementami tekstowymi (domyślnie = False).
Dim a As Variant
a = SF_Array.Intersection(Array("A", "C", "A", "b", "B"), Array("C", "Z", "b"), True)
' ("C", "b")
Połącz dwuwymiarową tablicę z dwoma ogranicznikami, jednym dla kolumn, drugim dla wierszy.
svc.Join2D(array_2d: any [0..*, 0..*], [columndelimiter: str], [rowdelimiter: str], [quote: str]): str
array_2d: każdy element musi być tekstem, liczbą, datą lub wartością logiczną.
Daty są przekształcane do formatu YYYY-MM-DD hh:mm:ss.
Nieprawidłowe elementy są zastępowane łańcuchem o zerowej długości.
columndelimiter: ogranicza każdą kolumnę (domyślnie = Tab/Chr(9)).
rowdelimiter: ogranicza każdy wiersz (domyślnie = LineFeed/Chr(10))
quote: jeśli True, chroń ciągi za pomocą podwójnych cudzysłowów. Wartość domyślna to False.
' 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 at the beginning of the input array the items listed as arguments.
svc.Prepend(array_1d: any[0..*], arg0: any, [arg1: any] ...): any[0..*]
array_1d: The pre-existing array, may be empty.
arg0, arg1, ...: A list of items to prepend to array_1d.
Dim a As Variant
a = SF_Array.Prepend(Array(1, 2, 3), 4, 5)
' (4, 5, 1, 2, 3)
Prepend to the left side of a two dimension array a new column. The resulting array has the same lower boundaries as the initial two dimension array.
svc.PrependColumn(array_2d: any[0..*, 0..*], column: any[0..*]): any[0..*, 0..*]
array_2d: The pre-existing array, may be empty. If that array has 1 dimension, it is considered as the last column of the resulting 2 dimension array.
column: A 1-dimensional array with as many items as there are rows in array_2d.
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
Prepend a new row at the beginning of a 2-dimensional array. The resulting array has the same lower boundaries as the initial 2-dimensional array.
svc.PrependRow(array_2d: any[0..*, 0..*], row: any[0..*]): any[0..*, 0..*]
array_2d: The pre-existing array, may be empty. If that array has 1 dimension, it is considered as the last row of the resulting 2-dimensional array.
row: A 1-dimensional array containing as many items as there are columns in array_2d.
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
Initialize a new zero-based array with numeric values.
svc.RangeInit(from: num, upto: num, [bystep: num]): num[0..*]
from: Value of the first item.
upto: The last item should not exceed UpTo.
bystep: The difference between two successive items (Default = 1).
Dim a As Variant
a = SF_Array.RangeInit(10, 1, -1)
' (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
Return the reversed one dimension input array.
svc.Reverse(array_1d: any[0..*]): any[0..*]
array_1d: The array to reverse.
Dim a As Variant
a = SF_Array.Reverse(Array("a", 2, 3, 4))
' (4, 3, 2, "a")
Returns a random permutation of a one-dimensional array.
svc.Shuffle(array_1d: any[0..*]): any[0..*]
array_1d: The array to shuffle.
Dim a As Variant
a = SF_Array.Shuffle(Array(1, 2, 3, 4))
' Array "a" is now in random order, f.i. (2, 3, 1, 4)
Returns a subset of a one-dimensional array.
svc.Slice(array_1d: any[0..*], from: int, [upto: int]): any[0..*]
array_1d: The array to slice.
from: The lower index in array_1d of the subarray to extract (from included)
upto: The upper index in array_1d of the subarray to extract (upto included). The default value is the upper bound of array_1d. If upto < from then the returned array is empty.
Dim a As Variant
a = SF_Array.Slice(Array(1, 2, 3, 4, 5), 1, 3) ' (2, 3, 4)
Sort a one dimension array in ascending or descending order. Text comparisons can be case-sensitive or not.
The array must be filled homogeneously, which means that items must be scalars of the same type.
Empty and Null items are allowed. Conventionally Empty < Null < any other scalar value.
svc.Sort(array_1d: any[0..*], sortorder: str, casesensitive: bool = False): any[0..*]
array_1d: The array to sort.
sortorder: It can be either "ASC" (default) or "DESC".
casesensitive: Only for string comparisons (Default = False).
Dim a As Variant
a = SF_Array.Sort(Array("a", "A", "b", "B", "C"), CaseSensitive := True)
' ("A", "B", "C", "a", "b")
Return a permutation of the columns of a two dimension array, sorted on the values of a given row.
The row must be filled homogeneously, which means that all items must be scalars of the same type.
Empty and Null items are allowed. Conventionally Empty < Null < any other scalar value.
svc.SortColumns(array_2d: any[0..*, 0..*], rowindex: int, sortorder: str, casesensitive: bool = False): any[0..*, 0..*]
array_2d: The 2-dimensional array to sort.
rowindex: The index of the row that will be used as reference to sort the columns.
sortorder: It can be either "ASC" (default) or "DESC".
casesensitive: Only for string comparisons (Default = False).
' 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 |
Return a permutation of the rows of a two dimension array, sorted on the values of a given column.
The column must be filled homogeneously, therefore all items must be scalars of the same type.
Empty and Null items are allowed. Conventionally Empty < Null < any other scalar value.
svc.SortRows(array_2d: any[0..*, 0..*], columnindex: int, sortorder: str, casesensitive: bool = False): any[0..*, 0..*]
array_2d: The array to sort.
columnindex: The index of the column that will be used as reference to sort the rows.
sortorder: It can be either "ASC" (default) or "DESC".
casesensitive: Only for string comparisons (Default = False).
' 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 |
Swaps rows and columns in a two-dimensional array.
svc.Transpose(array_2d: any[0..*, 0..*]): any[0..*, 0..*]
array_2d: The 2-dimensional array to transpose.
' 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
Remove from a one dimension array all Null, Empty and zero-length entries.
String items are trimmed with LibreOffice Basic Trim() function.
svc.TrimArray(array_1d: any[0..*]): any[0..*]
array_1d: The array to trim.
Dim a As Variant
a = SF_Array.TrimArray(Array("A", "B", Null, " D "))
' ("A", "B", "D")
Builds a set, as a zero-based array, by applying the union operator on the two input arrays. Resulting items originate from any of both arrays.
The resulting array is sorted in ascending order.
Both input arrays must be filled homogeneously, their items must be scalars of the same type. Empty and Null items are forbidden.
Text comparison can be case sensitive or not.
svc.Union(array1_1d: any[0..*], array2_1d: any[0..*], casesensitive: bool = False): any[0..*]
array1_1d: The first input array.
array2_1d: The second input array.
casesensitive: Applicable only if the arrays are populated with strings (Default = False).
Dim a As Variant
a = SF_Array.Union(Array("A", "C", "A", "b", "B"), Array("C", "Z", "b"), True)
' ("A", "B", "C", "Z", "b")
Build a set of unique values derived from the input array.
The input array must be filled homogeneously, its items must be scalars of the same type. Empty and Null items are forbidden.
Text comparison can be case sensitive or not.
svc.Unique(array_1d: any[0..*], casesensitive: bool = False): any[0..*]
array_1d: The input array.
casesensitive: Applicable only if the array is populated with strings (Default = False).
Dim a As Variant
a = SF_Array.Unique(Array("A", "C", "A", "b", "B"), CaseSensitive := True)
' ("A", "B", "C", "b")