Po uvedení funkcií pre prácu s dialógom si dnes uvedieme funkcie pre vlastné vyhľadávanie a zámeny reťazcov podľa parametrov, ktoré sme si nastavili v dialógu pre špeciálne zámeny.

REM Príprava globálnych premenných podľa dialógu
REM Funkcia vráti True, ak premenné neboli zmenené
function Nastav_premenne as boolean
REM Nastavenie, či bol niektorý parameter zmenený, môžeme urobiť jedným logickým výrazom
Nastav_premenne=(zamen_V_retazci = oDlg.model.V_retazci.Text) and _
(zamen_Hladat = oDlg.model.Hladat.Text) and _
(zamen_Nahradit_za = oDlg.model.Nahradit_za.Text) and _
(zamen_Regularne_vyrazy = (oDlg.model.Regularne_vyrazy.State=1)) and _
(zamen_Cele_slova = (oDlg.model.Cele_slova.State=1)) and _
(zamen_Velke_pismena = (oDlg.model.Velke_pismena.State=1)) and _
(zamen_Ponechat_velke = (oDlg.model.Ponechat_velke.State=1))
REM Bez ohľadu na to, či bola zmena alebo nie, nastavíme aktuálne parametre do globálnych premenných
zamen_V_retazci = oDlg.model.V_retazci.Text
zamen_Hladat = oDlg.model.Hladat.Text
zamen_Nahradit_za = oDlg.model.Nahradit_za.Text
zamen_Regularne_vyrazy = oDlg.model.Regularne_vyrazy.State=1
zamen_Cele_slova = oDlg.model.Cele_slova.State=1
zamen_Velke_pismena = oDlg.model.Velke_pismena.State=1
zamen_Ponechat_velke = oDlg.model.Ponechat_velke.State=1
end function
REM Funkcia pre vyhľadanie ďalšieho výskytu hľadaného reťazca
sub Hladaj_Retazec
dim oDokument, oHladaj, oKurzor as object
Nastav_premenne ' Pretože sa nastavenie môže meniť počas otvoreného dialógu hľadania, musíme priebežne nastavovať aj globálne premenné
oDokument=ThisComponent
oHladaj=oDokument.createSearchDescriptor()
oHladaj.searchString=zamen_V_retazci
oHladaj.SearchRegularExpression=zamen_Regularne_vyrazy
oHladaj.SearchWords=zamen_Cele_slova
oHladaj.SearchCaseSensitive=zamen_Velke_pismena
oKurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
oKurzor.collapseToEnd() ' ak je niečo označené, tak zrušíme výber
oNasiel=oKurzor ' Hľadať začíname od polohy viditeľného kurzora
oNasiel = oDokument.findNext( oNasiel.getEnd(), oHladaj) ' Hľadanie ďalšieho výskytu hľadaného reťazca
if not isNull(oNasiel) then ' Ak sme našli, tak označíme text
oKurzor.gotoRange(oNasiel.getStart(),false)
oKurzor.gotoRange(oNasiel.getEnd(),true)
else ' Ak sme nenašli, opýtame sa, či hľadať od začiatku dokumentu
if msgbox(sPopis1,36,sPopis0)=6 then ' Otázka "OpenOffice.org hľadal až po koniec dokumentu. Chcete pokračovať od začiatku?"
' Stlačené tlačidlo "Áno"
oNasiel = oDokument.findFirst(oHladaj) ' Hľadanie prvého výskytu hľadaného reťazca od začiatku dokumentu
if not isNull(oNasiel) then ' Ak sme našli, tak označíme text
oKurzor.gotoRange(oNasiel.getStart(),false)
oKurzor.gotoRange(oNasiel.getEnd(),true)
else
msgbox(sPopis2,64,sPopis0) ' Hľadaný reťazec nenájdený
end if
end if
end if
end sub
REM Vlastná výmena reťazca Co za reťazec Za vo vnútri reťazca V_Com
function Zamen_Vo_Vnutri (V_Com, Co, Za as string) as string
dim pom, pomV, pomZa as string
dim i, j as long
pom=V_Com
pomV=V_Com
if LCase(co)<>LCase(za) then ' Nemôžeme hľadať a nahrádzať rovnaký znak
do
pomZa=Za ' Ponechávame iba prvé veľké/malé písmeno,preto ostatné zámeny robíme podľa pôvodného reťazca
i=instr(pomV,Co)
j=len(pomV)-i-len(Co)+1
if i>0 then ' Ak sme našli
if zamen_Ponechat_velke and (i=1) then ' Ak ponechávame prvé písmeno veľké/malé a zároveň zamieňame prvé písmeno
if left(V_Com,1)=LCase(left(V_Com,1)) then ' Nájdený reťazec začína malým písmenom
pomZa=LCase(left(pomZa,1))+right(pomZa,len(pomZa)-1) ' Prvé písmeno reťazca, ktorým nahrádzame bude tiež malé
else ' Nájdený reťazec začína veľkým písmenom
pomZa=UCase(left(pomZa,1))+right(pomZa,len(pomZa)-1) ' Prvé písmeno reťazca, ktorým nahrádzame bude tiež veľké
end if
end if
pom=left(pomV,i-1)+pomZa ' Ľavá časť + náhrada
if j>0 then ' Ak za nájdeným reťazcom ešte niečo bolo, tak pridáme aj túto (pravú) časť
pom=pom+right(pomV,j)
end if
pomV=pom
end if
loop until i=0 ' Hľadanie opakujeme pre všetky vnútorné výskyty
end if
Zamen_Vo_Vnutri=pom
end function
REM Procedúra pre jednu zámenu
REM Ak sme na hľadanom reťazci, tak nahradíme. Potom hľadáme ďalší výskyt hľadaného reťazca.
sub Zamen_Retazec_Jeden
dim sPom as string
dim kolko as long
if Nastav_premenne then ' Ak pokračujeme v hľadaní bez zmeny parametrov hľadania
if zamen_V_retazci="" then exit sub ' Ak nezadáme hľadaný reťazec, ukončíme procedúru
if not isNull(oNasiel) then ' Ak sme na nájdenom reťazci, tak zamieňame
sPom=zamen_Nahradit_za ' Reťazec, ktorým nahrádzame
if zamen_Hladat="" then
REM Ak nezadáme reťazec "Hladat", zamieňame priamo
if zamen_Ponechat_velke then ' Ak ponechávame prvé písmeno veľké/malé
if left(oNasiel.String,1)=LCase(left(oNasiel.String,1)) then ' Nájdený reťazec začína malým písmenom
sPom=LCase(left(sPom,1))+right(sPom,len(sPom)-1) ' Prvé písmeno reťazca, ktorým nahrádzame bude tiež malé
else ' Nájdený reťazec začína veľkým písmenom
sPom=UCase(left(sPom,1))+right(sPom,len(sPom)-1) ' Prvé písmeno reťazca, ktorým nahrádzame bude tiež veľké
end if
end if
oNasiel.String=sPom
else
REM Ak zadáme reťazec "V_retazci", zanieňame špeciálne
oNasiel.String=Zamen_Vo_Vnutri(oNasiel.String,zamen_Hladat,sPom) ' Veľké/malé písmeno sa testuje počas zámeny
end if
end if
end if
Hladaj_Retazec ' Nájdeme ďalší výskyt hľadaného reťazca
end sub
REM Procedúra pre zámenu všetkých výskytov
sub zamen_retazec_all
dim sPom, sPopis as string
dim kolko as long
Nastav_premenne
if zamen_V_retazci="" then exit sub ' Ak nezadáme hľadaný reťazec, ukončíme procedúru
oDokument=ThisComponent
oHladaj=oDokument.createSearchDescriptor()
oHladaj.searchString=zamen_V_retazci
oHladaj.SearchRegularExpression=zamen_Regularne_vyrazy
oHladaj.SearchWords=zamen_Cele_slova
oHladaj.SearchCaseSensitive=zamen_Velke_pismena
kolko=0
oNasiel=oDokument.findFirst(oHladaj) ' Hľadáme od prvého výskytu hľadaného reťazca od začiatku dokumentu
Do While NOT isNull(oNasiel) ' Pokiaľ sme niečo našli
kolko=kolko+1
sPom=zamen_Nahradit_za ' Reťazec, ktorým nahrádzame
if zamen_Hladat="" then
REM Ak nezadáme reťazec "Hladat", zamieňame priamo
if zamen_Ponechat_velke then ' Ak ponechávame prvé písmeno veľké/malé
if left(oNasiel.String,1)=LCase(left(oNasiel.String,1)) then ' Nájdený reťazec začína malým písmenom
sPom=LCase(left(sPom,1))+right(sPom,len(sPom)-1) ' Prvé písmeno reťazca, ktorým nahrádzame bude tiež malé
else ' Nájdený reťazec začína veľkým písmenom
sPom=UCase(left(sPom,1))+right(sPom,len(sPom)-1) ' Prvé písmeno reťazca, ktorým nahrádzame bude tiež veľké
end if
end if
oNasiel.String=sPom
else
REM Ak zadáme reťazec "V_retazci", zanieňame špeciálne
oNasiel.String=Zamen_Vo_Vnutri(oNasiel.String,zamen_Hladat,sPom) ' Veľké/malé písmeno sa testuje počas zámeny
end if
oNasiel = oDokument.findNext( oNasiel.getEnd(), oHladaj) ' Hľadanie ďalšieho výskytu hľadaného reťazca
Loop
sPopis=sPopis3+" "+trim(str(kolko)+" "+sPopis4
msgbox(sPopis,64,sPopis0) ' Výpis počtu náhrad
end sub