Archív Inet.sk Pôvodný autor: Július Pastierik
23. 02. 2011 o 00:00 1478x

Makrá v OpenOffice.org: Špeciálna zámena (2)

V minulom dieli o programovaní makier v OpenOffice.org sme si ukázali prvú časť makier pre špeciálnu zámenu reťazcov, ktoré sa venovali dialógu. V dnešnom druhom (a zároveň záverečnom) dieli si uvedieme makrá, v ktorých budeme prevádzať vlastné zámeny.
Makrá v OpenOffice.org: Špeciálna zámena (2)

 

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

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami Oznamy
21. 10. 2026

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami

Vývojársky tím PHP vydal dôležité bezpečnostné záplaty pre všetky oficiálne podporované verzie PHP 8. Na našich serveroch sme nezaváhali ...

Čítať viac
Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás? Oznamy
01. 10. 2026

Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás?

Google oznámil, že v januári 2027 zruší v Gmaile funkciu „Odoslať ako“ (Send as) pre e-mailové adresy od iných poskytovateľov. Ak ste si ...

Čítať viac
Večerná „prestávka“ pre server VIP033 Oznamy
25. 09. 2026

Večerná „prestávka“ pre server VIP033

Neustále pracujeme na tom, aby vaše weby bežali hladko, rýchlo a bezpečne. Technológie idú míľovými krokmi vpred a my v Inet.sk s nimi dr...

Čítať viac
Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Férová
cena

Cena pri obnove je rovnaká ako pri objednávke. Nezdražujeme po prvom roku a bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies