Funkcje tekstowe: Różnice pomiędzy wersjami
m (1 wersja) |
|||
Linia 88: | Linia 88: | ||
− | [[LibreOffice Calc – makra | <b>LibreOffice Calc – makra</b>]] [[Henryk Dąbrowski | <b>Strona główna</b>]] | + | [[LibreOffice Calc – makra – przykłady | <b>LibreOffice Calc – makra – przykłady</b>]] [[Henryk Dąbrowski | <b>Strona główna</b>]] |
Aktualna wersja na dzień 15:32, 24 maj 2024
Zamiana fragmentu ciągu na inny ciąg
Bardzo użyteczna jest funkcja, która w zadanym ciągu znaków wyszukuje określony podciąg znaków i zastępuje ten podciąg innym ciągiem znaków. LibreOffice ma wbudowaną funkcję o nazwie Replace(), która umożliwia wykonanie takiej operacji. Przykład zamieszczamy jedynie dla przedstawienia kodu i porównania działania obydwu funkcji. Parametr CompareType jest opcjonalny i domyślnie przyjmuje wartość numeryczną 0 (w przypadku pominięcia parametru). Określa on, czy będą rozróżniane małe i duże litery. Oto dozwolone wartości tego parametru:
- 0 – będą rozróżniane małe i duże litery
- 1 – wielkość liter nie będzie miała znaczenia
Function Zamien(Chars as String, Cut as String, Insert as String, Optional CompareType as Long) as String
'zamienia w ciągu znaków Chars ciąg Cut na ciąg Insert;
'opcjonalny parametr CompareType decyduje o tym, czy rozróżniana jest wielkość liter
Dim Txt as String, Lxt as String, Rxt as String
Dim CaseSens as Long, Poz as Long
If IsMissing(CompareType) Then
CaseSens = 0
Else
CaseSens = CompareType
End If
If Cut = "" Then 'zostanie zwrócony ciąg bez zmian
Zamien = Chars
Exit Function
End If
Txt = Chars
Poz = InStr(1, Txt, Cut, CaseSens) 'położenie ciągu Cut w ciągu Txt
Do While Poz > 0
Lxt = Mid(Txt, 1, Poz - 1) 'część ciągu Txt na lewo od znalezionego ciągu Cut
Rxt = Mid(Txt, Poz + Len(Cut)) 'część ciągu Txt na prawo od znalezionego ciągu Cut
Txt = Lxt & Insert & Rxt
Poz = InStr(Poz + Len(Insert), Txt, Cut, CaseSens)
Loop
Zamien = Txt
End Function
Sub Tekstowe1()
MsgBox Zamien("", "1", "123") & Chr(10) & Replace("", "1", "123") ' "|"
MsgBox Zamien("abcd", "", "123") & Chr(10) & Replace("abcd", "", "123") ' "abcd|abcd"
MsgBox Zamien("abcd", "a", "") & Chr(10) & Replace("abcd", "a", "") ' "bcd|bcd"
MsgBox Zamien("abcd", "a", "11") & Chr(10) & Replace("abcd", "a", "11") ' "11bcd|11bcd"
MsgBox Zamien("abcd", "A", "22") & Chr(10) & Replace("abcd", "A", "22") ' "abcd|22bcd"
MsgBox Zamien("abcdA", "A", "22", 1) & Chr(10) & Replace("abcdA", "A", "22", 1, 1, TRUE) ' "22bcd22|22bcdA"
MsgBox Zamien("abcdA", "A", "22", 1) & Chr(10) & Replace("abcdA", "A", "22", 1, 2, 1) ' "22bcd22|22bcd22"
MsgBox Zamien("abcdA", "A", "22", 0) & Chr(10) & Replace("abcdA", "A", "22", 1, 2, 0) ' "abcd22|abcd22
MsgBox Zamien("abcd", "bc", "x") & Chr(10) & Replace("abcd", "bc", "x") ' "axd|axd"
MsgBox Zamien("1a11aa", "1", "11") & Chr(10) & Replace("1a11aa", "1", "11") ' "11a1111aa|11a1111aa"
MsgBox Zamien("1a11aa", "a", "aa") & Chr(10) & Replace("1a11aa", "a", "aa") ' "1aa11aaaa|1aa11aaaa"
End Sub
Zauważmy, że znaczenie ostatniego parametru obydwu funkcji jest takie samo (0 / FALSE - rozróżnianie są małe i duże litery), ale domyślne działanie funkcji jest odwrotne. W przypadku braku ostatniego parametru funkcja Zamien() rozróżnia małe i duże litery, a funkcja Replace() nie rozróżnia.
Losowa litera alfabetu
Funkcja zwraca losową (przypadkową) literę alfabetu angielskiego.
Function RandomLetter() as String
'zwraca przypadkową literę z alfabetu angielskiego
Dim k as Long
k = 65 + Int( 26 * Rnd() ) 'Rnd() zwraca liczbę losową z przedziału [0,1)
RandomLetter = Chr(k) 'duże litery alfabetu angielskiego mają kody ASCII od 65 do 90
End Function
Sub Tekstowe2()
'wypełnia kolumnę A pierwszego arkusza przypadkowymi literami alfabetu angielskiego
Dim oSht as Object, oCll as Object
Dim k as Long
oSht = ThisComponent.getSheets().getByIndex(0) 'uchwyt do pierwszego arkusza
ThisComponent.CurrentController.setActiveSheet(oSht) 'aktywacja pierwszego arkusza
oSht.getCellByPosition(0, 0).String = "Litery"
For k = 1 To 2600
oSht.getCellByPosition(0, k).String = RandomLetter()
Next k
End Sub
LibreOffice Calc – makra – przykłady Strona główna