VYŘEŠENO
]]>oHladaj.searchString="[:digit:]*(,|\.|[:digit:])[:digit:]*"
...
sCela=trim(format(val(sCela), "#"+chr$(&HA0)+"##0"))
Navyše je tam oddeľovanie celej časti od desatinnej - formátuje sa iba celá časť, cyklus hľadania je trochu iný. V podstate ste to však vystihli.
]]>sub format_cisla 'formátuje do bilionu
doc=thisComponent
formcisla=doc.CreateReplaceDescriptor
formcisla.searchstring = "[:digit:]{4,}"
formcisla.SearchRegularExpression = true
pocet=doc.findAll(formcisla)
for n = 0 to pocet.count - 1
formatuj_vse = pocet(n)
oznaccislo = formatuj_vse.Text.createTextCursorByRange(formatuj_vse)
kformatovani=oznaccislo.getString
if trim(str(val(kformatovani)))= kformatovani then
kformatovani=format(kformatovani, "###,###,###,###,###")
formatuj_vse.SetString(kformatovani)
end if
next n
end sub
Nedostatek - formát čísla musíte provést před desetinou čárkou (rozumějte kurzor musí být ihned za číslem a před desetinou čárkou).
Přesto mi přijde tento postup zbytečně komplikovaný a jen jsem si to uložil za domácí úkol ;o). Možná, by ale stálo za úvahu mít možnost takového formátování čísel v některém z rozšíření? Pak by se upravoval již napsaný text zpětně v celém dokumentu.
sub formatuj_cislo
dim kurzor, doc as object
dim cislo as long
dim scislo as string
doc=ThisComponent.CurrentController
kurzor=doc.getViewCursor() ' Aktuálna pozícia kurzora
scislo=posledne_slovo(kurzor)
if trim(str(val(scislo)))=scislo then
scislo=format(scislo,"###,###,###,###,###,###")
kurzor.SetString(scislo) ' označené číslo prepíšeme novým formátem
end if
kurzor.goright(len(scislo),false) ' nakoniec odznačíme blok (zostal označený aj po vložení textu)
end sub
function posledne_slovo(kurzor as object) as string
' funkcia vráti posledne napísané slovo a zároveň ho označí do bloku
dim poms as string
dim slovo as boolean
dim OddelovaceSlov as string
OddelovaceSlov=" "+chr(&HA0)+chr(&H09)+chr(&H0A)+chr(&H0D)
OddelovaceSlov=OddelovaceSlov+"-/.,!?;…"
OddelovaceSlov=OddelovaceSlov+"()[]{}"
DesettinaCarka=","
poms=""
slovo=false
do while (not kurzor.isAtStartOfLine) and (not slovo)
' pokiaľ nie sme na začiatku riadku a nie sme ešte na začiatku slova
' tak sa presunieme o jeden znak doľava s tým, že označíme tento znak do bloku
kurzor.goleft(1,true)
' označené slovo si uložíme do pomocnej premennej
poms=kurzor.getstring
' ak sme našli oddeľovač slov, tak sme na začiatku slova
slovo=instr(OddelovaceSlov,left(poms,1))
loop
if slovo and (len(poms)>1) then
' ak sme boli na začiatku slova (a ak sme vôbec niečo označili)
' tak musíme tento oddeľujúci znak z nájdeného slova vylúčiť, t.j.
' vrátime sa o krok späť
kurzor.goright(1,true)
poms=kurzor.getstring
end if
posledne_slovo=poms
end function
Pastierik forever
]]>Dík za radu.
]]>