Różnica pomiędzy stronami "Kolumny i wiersze" i "Funkcje tekstowe"
m (1 wersja) |
m (1 wersja) |
||
Linia 1: | Linia 1: | ||
− | <div style="text-align:right; font-size: 130%; font-style: italic; font-weight: bold;"> | + | <div style="text-align:right; font-size: 130%; font-style: italic; font-weight: bold;">20.09.2020</div> |
+ | __FORCETOC__ | ||
+ | == 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 | ||
− | + | <span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>Zamien(Chars <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>, Cut <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>, Insert <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>, <span style='color:#000080;'>Optional</span> CompareType <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>) <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span> | |
− | + | <span style='color:#707070;'>'zamienia w ciągu znaków Chars ciąg Cut na ciąg Insert;</span> | |
− | <span style="color: green"><b><span style='color:#1f1c1b;'> | + | <span style='color:#707070;'>'opcjonalny parametr CompareType decyduje o tym, czy rozróżniana jest wielkość liter </span> |
− | + | <b><span style='color:#1f1c1b;'>Dim</span></b> Txt <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>, Lxt <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span>, Rxt <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span> | |
− | + | <b><span style='color:#1f1c1b;'>Dim</span></b> CaseSens <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span>, Poz <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span> | |
− | + | <b><span style='color:#1f1c1b;'>If </span></b><span style='color:#0095ff;'>IsMissing</span>(CompareType) <b><span style='color:#1f1c1b;'>Then</span></b> | |
− | + | CaseSens <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>0</span> | |
− | + | <b><span style='color:#1f1c1b;'>Else</span></b> | |
− | + | CaseSens <span style='color:#000080;'>=</span> CompareType | |
− | + | <b><span style='color:#1f1c1b;'>End If</span></b> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <b><span style='color:#1f1c1b;'>Dim</span></b> | ||
− | <b><span style='color:#1f1c1b;'> | ||
− | |||
− | |||
− | |||
− | |||
− | + | <b><span style='color:#1f1c1b;'>If </span></b>Cut <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>""</span> <b><span style='color:#1f1c1b;'>Then</span></b> <span style='color:#707070;'>'zostanie zwrócony ciąg bez zmian</span> | |
− | + | Zamien <span style='color:#000080;'>=</span> Chars | |
− | + | <b><span style='color:#1f1c1b;'>Exit Function</span></b> | |
+ | <b><span style='color:#1f1c1b;'>End If</span></b> | ||
− | + | Txt <span style='color:#000080;'>=</span> Chars | |
− | + | Poz <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>InStr</span>(<span style='color:#ff0000;'>1</span>, Txt, Cut, CaseSens) <span style='color:#707070;'>'położenie ciągu Cut w ciągu Txt</span> | |
− | + | <b><span style='color:#1f1c1b;'>Do While </span></b>Poz > <span style='color:#ff0000;'>0</span> | |
− | + | Lxt <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>Mid</span>(Txt, <span style='color:#ff0000;'>1</span>, Poz - <span style='color:#ff0000;'>1</span>) <span style='color:#707070;'>'część ciągu Txt na lewo od znalezionego ciągu Cut</span> | |
− | + | Rxt <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>Mid</span>(Txt, Poz + <span style='color:#0095ff;'>Len</span>(Cut)) <span style='color:#707070;'>'część ciągu Txt na prawo od znalezionego ciągu Cut</span> | |
− | + | Txt <span style='color:#000080;'>=</span> Lxt <span style='color:#000080;'>&</span> Insert <span style='color:#000080;'>&</span> Rxt | |
− | + | Poz <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>InStr</span>(Poz + <span style='color:#0095ff;'>Len</span>(Insert), Txt, Cut, CaseSens) | |
− | + | <b><span style='color:#1f1c1b;'>Loop</span></b> | |
− | + | Zamien <span style='color:#000080;'>=</span> Txt | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <span style='color:# | ||
− | |||
− | |||
<b><span style='color:#1f1c1b;'>End Function</span></b></span> | <b><span style='color:#1f1c1b;'>End Function</span></b></span> | ||
− | <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b> | + | <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Tekstowe1() |
− | MsgBox <span style='color:#0095ff;'> | + | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>""</span>, <span style='color:#ff0000;'>"1"</span>, <span style='color:#ff0000;'>"123"</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>""</span>, <span style='color:#ff0000;'>"1"</span>, <span style='color:#ff0000;'>"123"</span>) <span style='color:#707070;'>' "|"</span> |
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>""</span>, <span style='color:#ff0000;'>"123"</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>""</span>, <span style='color:#ff0000;'>"123"</span>) <span style='color:#707070;'>' "abcd|abcd"</span> | ||
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>"a"</span>, <span style='color:#ff0000;'>""</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>"a"</span>, <span style='color:#ff0000;'>""</span>) <span style='color:#707070;'>' "bcd|bcd"</span> | ||
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>"a"</span>, <span style='color:#ff0000;'>"11"</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>"a"</span>, <span style='color:#ff0000;'>"11"</span>) <span style='color:#707070;'>' "11bcd|11bcd"</span> | ||
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>"A"</span>, <span style='color:#ff0000;'>"22"</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>"A"</span>, <span style='color:#ff0000;'>"22"</span>) <span style='color:#707070;'>' "abcd|22bcd"</span> | ||
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"abcdA"</span>, <span style='color:#ff0000;'>"A"</span>, <span style='color:#ff0000;'>"22"</span>, <span style='color:#ff0000;'>1</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"abcdA"</span>, <span style='color:#ff0000;'>"A"</span>, <span style='color:#ff0000;'>"22"</span>, <span style='color:#ff0000;'>1</span>, <span style='color:#ff0000;'>1</span>, TRUE) <span style='color:#707070;'>' "22bcd22|22bcdA"</span> | ||
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"abcdA"</span>, <span style='color:#ff0000;'>"A"</span>, <span style='color:#ff0000;'>"22"</span>, <span style='color:#ff0000;'>1</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"abcdA"</span>, <span style='color:#ff0000;'>"A"</span>, <span style='color:#ff0000;'>"22"</span>, <span style='color:#ff0000;'>1</span>, <span style='color:#ff0000;'>2</span>, <span style='color:#ff0000;'>1</span>) <span style='color:#707070;'>' "22bcd22|22bcd22"</span> | ||
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"abcdA"</span>, <span style='color:#ff0000;'>"A"</span>, <span style='color:#ff0000;'>"22"</span>, <span style='color:#ff0000;'>0</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"abcdA"</span>, <span style='color:#ff0000;'>"A"</span>, <span style='color:#ff0000;'>"22"</span>, <span style='color:#ff0000;'>1</span>, <span style='color:#ff0000;'>2</span>, <span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>' "abcd22|abcd22</span> | ||
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>"bc"</span>, <span style='color:#ff0000;'>"x"</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"abcd"</span>, <span style='color:#ff0000;'>"bc"</span>, <span style='color:#ff0000;'>"x"</span>) <span style='color:#707070;'>' "axd|axd"</span> | ||
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"1a11aa"</span>, <span style='color:#ff0000;'>"1"</span>, <span style='color:#ff0000;'>"11"</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"1a11aa"</span>, <span style='color:#ff0000;'>"1"</span>, <span style='color:#ff0000;'>"11"</span>) <span style='color:#707070;'>' "11a1111aa|11a1111aa"</span> | ||
+ | MsgBox <span style='color:#0095ff;'>Zamien</span>(<span style='color:#ff0000;'>"1a11aa"</span>, <span style='color:#ff0000;'>"a"</span>, <span style='color:#ff0000;'>"aa"</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Chr</span>(<span style='color:#ff0000;'>10</span>) <span style='color:#000080;'>&</span> <span style='color:#0095ff;'>Replace</span>(<span style='color:#ff0000;'>"1a11aa"</span>, <span style='color:#ff0000;'>"a"</span>, <span style='color:#ff0000;'>"aa"</span>) <span style='color:#707070;'>' "1aa11aaaa|1aa11aaaa"</span> | ||
<b><span style='color:#1f1c1b;'>End Sub</span></b></span> | <b><span style='color:#1f1c1b;'>End Sub</span></b></span> | ||
+ | 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. | ||
− | + | <span style="color: green"><b><span style='color:#1f1c1b;'>Function </span></b>RandomLetter() <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>String</span> | |
− | + | <span style='color:#707070;'>'zwraca przypadkową literę z alfabetu angielskiego</span> | |
− | |||
− | |||
− | <span style="color: green"><b><span style='color:#1f1c1b;'> | ||
− | |||
− | |||
<b><span style='color:#1f1c1b;'>Dim</span></b> k <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span> | <b><span style='color:#1f1c1b;'>Dim</span></b> k <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span> | ||
− | + | k <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>65</span> + <span style='color:#0095ff;'>Int</span>( <span style='color:#ff0000;'>26</span> * <span style='color:#0095ff;'>Rnd</span>() ) <span style='color:#707070;'>'Rnd() zwraca liczbę losową z przedziału [0,1)</span> | |
− | + | RandomLetter <span style='color:#000080;'>=</span> <span style='color:#0095ff;'>Chr</span>(k) <span style='color:#707070;'>'duże litery alfabetu angielskiego mają kody ASCII od 65 do 90</span> | |
− | + | <b><span style='color:#1f1c1b;'>End Function</span></b></span> | |
− | |||
− | <b><span style='color:#1f1c1b;'>End | ||
− | + | <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b>Tekstowe2() | |
− | <span style="color: green"><b><span style='color:#1f1c1b;'>Sub </span></b> | + | <span style='color:#707070;'>'wypełnia kolumnę A pierwszego arkusza przypadkowymi literami alfabetu angielskiego</span> |
− | <span style='color:#707070;'>' | + | <b><span style='color:#1f1c1b;'>Dim</span></b> oSht <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span>, oCll <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Object</span> |
− | <b><span style='color:#1f1c1b;'>Dim</span></b> | ||
<b><span style='color:#1f1c1b;'>Dim</span></b> k <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span> | <b><span style='color:#1f1c1b;'>Dim</span></b> k <b><span style='color:#1f1c1b;'>as</span></b> <span style='color:#000080;'>Long</span> | ||
− | + | oSht <span style='color:#000080;'>=</span> ThisComponent.getSheets().getByIndex(<span style='color:#ff0000;'>0</span>) <span style='color:#707070;'>'uchwyt do pierwszego arkusza</span> | |
− | < | + | ThisComponent.CurrentController.setActiveSheet(oSht) <span style='color:#707070;'>'aktywacja pierwszego arkusza</span> |
− | + | oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>, <span style='color:#ff0000;'>0</span>).<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>"Litery"</span> | |
+ | <b><span style='color:#1f1c1b;'>For </span></b>k <span style='color:#000080;'>=</span> <span style='color:#ff0000;'>1</span> <b><span style='color:#1f1c1b;'>To</span></b> <span style='color:#ff0000;'>2600</span> | ||
+ | oSht.getCellByPosition(<span style='color:#ff0000;'>0</span>, k).<span style='color:#000080;'>String</span> <span style='color:#000080;'>=</span> RandomLetter() | ||
<b><span style='color:#1f1c1b;'>Next </span></b>k | <b><span style='color:#1f1c1b;'>Next </span></b>k | ||
<b><span style='color:#1f1c1b;'>End Sub</span></b></span> | <b><span style='color:#1f1c1b;'>End Sub</span></b></span> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Aktualna wersja na dzień 21:36, 18 wrz 2022
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 Strona główna