Komentáře Programovanie makier v LibreOffice: Formátovanie funkcie Asc

user avatar neutr
Odpovědět
Programovanie makier v LibreOffice: Formátovanie funkcie Asc
11. 01. 2018, 17:36:05
Musím upozornit na malý detail ale důležitý. ASC není totéž co ASCII.
Cituji nápovědu a prokládám komenty :

Vrátí ASCII (American Standard Code for Information Interchange) prvního znaku v řetězci.
Syntaxe: Asc(Text As String) : Návratová hodnota : Celé číslo
Parametry:
Text: Platný řetězec. V úvahu se bere jen první znak řetězce.
Pomocí funkce Asc nahradíte klíče hodnotami.
-až sem je to téměř dobře---------------------------------------

Pokud funkce Asc narazí na prázdný řetězec, LibreOffice Basic oznámí chybu [to je vlastně přetečení - empty, ani Null není znak - musí se testovat od hodnoty 1 do hodnoty LEN(text)].

Kromě 7bitových ASCII znaků (kódy 0-127) umí funkce Asc zjistit také netisknutelné znaky ASCII kódu.
- tohle je důležité ale pro neznalého značně nebezpečné-------------
- doporučuji pracovat jen s kódy 32 až 126 - jinak je průšvih.


!!! - Tato funkce zpracuje také -!!- 16bitové Unicode znaky -!!-. Tady je malér jako Brno : umí jen 7bitových ASCII znaků (kódy 0-127) ale nikoliv národní prostředí ANSI (128-255). Vrací hned hodnotu Unicode 16 bitů.

- Totéž v modrém dělá funkce CHR(). Takže při programování Vás nesmí ani napadnout používat ke čtení nebo zápisu funkce ASC a CHR.

- Když uděláte testy tak zjistíte že přímo fungují jen :
UNICHAR == CHR
UNICODE == ASC

- Dá se to obejít emulací funkce CHAR() a CODE(). Nechci narušit kontinuitu výkladu a tak jestli Eda nemá vlastní řešení - poskytnu svoje.
user avatar neutr
Odpovědět
Re:Programovanie makier v LibreOffice: Formátovanie funkcie Asc - doplnění poznámky
11. 01. 2018, 18:11:39
Jde o to, že když načtete ze sešitu například českou dikritiku - funkce CODE vrátí hodnotu v rozmezí 128-255. Když tuto hodnotu dáte jako znak do funkce CHR() vrátí úplně něco jiného.

Dá se pouze načíst vše jako ASC a následně tento řetězec vrátit pomocí CHR(). V praxi to kolegové obchází zápisem, do array jako znaky v uvozovkách. Například "ř" a pak se to z array načte správně.

Problém je v tom, že národní část znakové sady je kódována navíc jako UTF-8. Ale tyto znaky mají "domovské číslo" v Unicode 16 bit a nikoliv mezi znaky 128-255.

Takže přepis jako string v uvozovkách funguje, ale přepis podle čísla ASC (CHR) nikoliv.

V prvním příspěvku jsem zapoměl popsat test v sešitu :
sloupec A CHAR(Row()-1), sloupec B UNICHAR(ROW-1), sloupec C CHR(řádek-1)
CHAR - UNICHAR - CHR
---- zpětný převod na stejném řádku
sloupec D CODE(unichar), sloupec E UNICHAR(Char), sloupec F ASC(char)
CODE(unichar) - UNICODE(char) - ASC(char)
user avatar Eduard Boldižár
Odpovědět
Re:Re:Programovanie makier v LibreOffice: Formátovanie funkcie Asc - doplnění poznámky
11. 01. 2018, 18:52:38
Vďaka za spresnenie a defakto skvalitnenie článku i pre ostatných, vážim si toho.
 
 
woo jaw demo hz