Hlavní navigace

Matematika v příkazové řádce XI - aplikace sc (2)

5. 4. 2006
Doba čtení: 11 minut

Sdílet

Celá jedenáctá část seriálu věnovaného matematicky zaměřeným aplikacím provozovaným zejména z příkazového řádku nebo z textového terminálu je zaměřena na popis pokročilejších operací, které je možné provádět v textově orientovaném tabulkovém procesoru sc, a to jak s jednotlivými buňkami, tak i s jejich výběrem nebo dokonce s celou tabulkou. Uvidíme, že některé operace je možné v sc provádět mnohem rychleji než v tabulkových procesorech s GUI.

Obsah

1. Typy dat ukládaných v buňkách tabulky
2. Příkazy určené pro vkládání údajů do buněk tabulky
3. Formátování buněk v tabulce
4. Práce se sloupci a řádky tabulky
5. Blokové operace
6. Operace nad zadanou oblastí
7. Obsah dalšího pokračování tohoto seriálu

1. Typy dat ukládaných v buňkách tabulky

Tabulkový procesor sc může, podobně jako mnohé jiné typy tabulkových procesorů, v jednotlivých buňkách svých tabulek uchovávat pouze dva typy dat. Prvním podporovaným datovým typem jsou numerické hodnoty, a to jak čísla celá (kladná i záporná), tak i čísla s desetinnou částí popř. i exponentem. Druhým podporovaným datovým typem jsou řetězce. Konkrétní hodnoty obou těchto typů dat se do buněk tabulky mohou vkládat buď přímým způsobem jako číselné či řetězcové konstanty, nebo pomocí vzorců a popř. i maker (ta mohou být v sc poměrně komplikovaná, protože je možné volat externí skripty, jejichž návratová hodnota je vložena do tabulky).

Typ dat v tabulce se, spolu s jejich formátem (tj. způsobem zobrazení na obrazovce či tiskárně), určuje příkazem již při vkládání dat do buňky. To mimo jiné znamená, že do jedné buňky tabulky je možné vložit číselnou hodnotu 123 a do buňky druhé řetězec „123“ – ve skutečnosti se však bude jednat o zcela odlišné hodnoty, i když způsob jejich textové prezentace na obrazovce (a samozřejmě také při některých exportech či tisku tabulky) může být stejný. Zde opět nacházíme podobnost s dalšími typy tabulkových procesorů. Ve druhé kapitole této části seriálu jsou vypsány základní příkazy, pomocí kterých se do buněk tabulky vkládají číselné a řetězcové hodnoty.

2. Příkazy určené pro vkládání údajů do buněk tabulky

V následující tabulce jsou vypsány příkazy, pomocí nichž se do buněk vkládají numerické či řetězcové hodnoty. Všechny uvedené příkazy pracují s aktivní buňkou, tj. buňkou, na které se nachází buňkový kurzor. Na tomto místě je vhodné upozornit na fakt, že se jedná o příkazy dostupné a platné v poslední vydané verzi tabulkového procesoru sc. Ve verzích předchozích byly některé příkazy odlišné. Například pro vložení vycentrovaného řetězce do buňky se používal příkaz ", ten je však dnes nahrazen (alespoň vzdáleně opticky podobným) příkazem \ (zpětné lomítko). Uvozovky dostaly jiný význam, který více odpovídá funkci tohoto příkazu v textovém editoru vi, s nímž se sc snaží být na úrovni příkazů do co největší míry konzistentní. To má svůj význam, protože autor sc (pravděpodobně správně) předpokládá, že cílovou skupinou uživatelů sc budou zejména zkušení unixoví (Linuxoví) uživatelé, kteří alespoň základy vi či Emacsu ovládají. Běžní uživatelé zpravidla dají přednost tabulkovým procesorům určeným pro grafické uživatelské rozhraní.

Klávesová zkratka Význam klávesové zkratky
= Vložení numerické hodnoty (konstanty), popř. i vzorce, jehož výsledkem je numerická hodnota. Po vhodném překonfigurování tabulkového procesoru není nutné příkaz zadávat v případě, že se vkládá přímo numerická hodnota.
< Vložení řetězcové hodnoty do aktivní buňky s tím, že vložený řetězec bude zarovnán k levému okraji buňky.
> Vložení řetězcové hodnoty do aktivní buňky s tím, že vložený řetězec bude zarovnán k pravému okraji buňky.
\ Vložení řetězcové hodnoty do aktivní buňky s tím, že vložený řetězec bude v buňce vycentrován.

Povšimněte si, že příkazy „<“ a „>“ si můžeme snadno mnemotechnicky zapamatovat podle směru „šipek“, které jsou zde představovány znaky „menší než“ a „větší než“. Také příkaz „=“ je snadno zapamatovatelný, protože numerické hodnoty se i v dalších programech (a programovacích jazycích) přiřazují pomocí tohoto znaku. Pokud je tabulkový procesor sc spuštěn s parametrem -n, je možné numerickou hodnotu zadávat i jejím přímým zápisem, tj. není nutné použít příkaz =. Chování sc se tedy při této konfiguraci přibližuje způsobu práce s tabulkovými procesory vybavenými grafickým uživatelským rozhraním, které automaticky (a samozřejmě v některých případech špatně) rozpoznávají typ vkládaných dat. Režim rychlého zadávání numerických údajů, který se v dokumentaci nazývá quick numeric entry, je možné v případě potřeby za běhu programu zapnout (a posléze vypnout) i klávesovou zkratkou Ctrl+Tn.

3. Formátování buněk v tabulce

Ve druhé kapitole jsme si popsali čtyři základní příkazy, pomocí kterých se do tabulky vkládají numerické i řetězcové hodnoty. Při praktické práci s tabulkou se však nevyhneme potřebě formátovat jednotlivé buňky, tj. měnit způsob zarovnání údajů, popř. i způsob zápisu numerických hodnot. Pro specifikaci i změnu formátování buněk je možné použít následujících pět příkazů:

Klávesová zkratka Význam klávesové zkratky
{ Zarovnání řetězcové hodnoty uložené v buňce směrem k levému okraji buňky.
} Zarovnání řetězcové hodnoty uložené v buňce směrem k pravému okraji buňky.
| Vycentrování řetězové hodnoty uložené v buňce.
F Změna formátování buňky s uloženou numerickou hodnotou.
f Změna formátování celého sloupce buněk.

Význam příkazů {, } a | je zřejmý a opět je u nich možné použít jednoduché mnemotechniky vycházející z tvaru použitých znaků (resp. z orientace hrotů závorek). Na použití mnohem složitější, ale současně také mocnější jsou příkazy F a f. Příkazem F se mění formát zobrazení jedné buňky, tj. buňky aktivní, zatímco příkazem f se mění formát zobrazení celého sloupce buněk. Jedná se o velmi užitečný příkaz, protože hodnoty uložené v jednom sloupci většinou představují stejný typ položek záznamů.

Po zadání příkazu F je očekáván takzvaný formátovací řetězec, který má podobný význam, jako formátovací řetězec funkce printf() známé například z programovacího jazyka C. Při zadávání formátovacího řetězce je možné použít několik editačních příkazů známých z textového editoru vi; jedná se zejména o příkazy a, i, c a d. Ve formátovacím řetězci se mohou vyskytovat následující speciální (formátovací či zástupné) znaky:

Formátovací znak Význam formátovacího znaku
% Pokud je ve formátovacím řetězci zadán znak procenta, znamená to, že numerická hodnota je před svým zobrazením vynásobena stem a po tisku výsledku se za tento výsledek přidá znak procenta. Samotná numerická hodnota se však nezmění, tj. například ve vzorcích se stále počítá s hodnotou původní. Příkladem formátovacího řetězce může být „%“ (tisk celé části hodnoty vynásobené stem), „0.0%“ (jedno desetinné místo), „0.00%“ (dvě desetinná místa) apod.
# Pomocí tohoto formátovacího znaku se specifikuje jedna číslice ve výpisu. Pokud by byl celkový počet číslic po rozepsání numerické hodnoty v buňce tabulky menší, než počet zadaných znaků „#“, nebyly by zbývající znaky „#“ brány v úvahu. Pokud by však díky malému počtu znaků „#“ mělo dojít k vizuální změně zobrazené hodnoty, bylo by číslo vytištěno v plném rozsahu. V případě, že formátovací řetězec obsahuje pouze znak „#“, bude vypsána celá část numerické hodnoty (zde se uplatní druhé pravidlo).
0 Tento formátovací znak má podobný význam jako znak #, ovšem s tím rozdílem, že se místo mezer používají nuly (které samozřejmě nemění hodnotu zobrazeného čísla). Nuly se však doplňují pouze v případě, že je počet číslic numerické hodnoty zapsané v buňce menší, než počet formátovacích znaků „0“. Příkladem použití může být formátovací řetězec „0000“, který čísla z rozsahu 0–9999 vypíše vždy se čtyřmi číslicemi.
. Pomocí tohoto formátovacího znaku je možné zadat, kolik znaků z čísla bude vypsáno nalevo a napravo od desetinné tečky (resp. čárky, podle nastavení locale). Příklady formátovacího řetězce využívajícího tečku: „0.0“, „000.00“ atd.
, Pokud je tento formátovací znak ve formátovacím řetězci obsažen, budou tisíce odděleny od stovek znakem, který se zjistí z nastavení národního prostředí (viz locale). V anglosaských zemích to bývá právě znak čárky. Podobné pravidlo je uplatněno pro oddělení milionů od stovek tisíc atd.
E- Numerická hodnota bude vypsána spolu s exponentem, který bude reprezentován velkým písmenem „E“. Pokud je exponent kladný, je za znak „E“ přímo zapsána jeho hodnota, v opačném případě je před hodnotu exponentu zapsán znak „-“. Příklad formátovacího řetězce pro čísla s exponentem: „0E-00“, „0.00E-00“.
e- Numerická hodnota bude vypsána spolu s exponentem, který bude reprezentován malým písmenem „e“. Pokud je exponent kladný, je za znak „e“ přímo zapsána jeho hodnota, v opačném případě je před hodnotu exponentu zapsán znak „-“.
E+ Numerická hodnota bude vypsána spolu s exponentem, který bude reprezentován velkým písmenem „E“. Pokud je exponent kladný, je za znak „E“ zapsán ještě znak „+“, v opačném případě je před hodnotu exponentu zapsán znak „-“. Příklad formátovacího řetězce pro čísla s exponentem: „0E+00“, „0.00E+00“.
e+ Numerická hodnota bude vypsána spolu s exponentem, který bude reprezentován malým písmenem „e“. Pokud je exponent kladný, je za znak „e“ zapsán ještě znak „+“, v opačném případě je před hodnotu exponentu zapsán znak „-“.
^D Zapsaná hodnota bude chápána jako datum, buňka tedy bude zformátována podle nastaveného lokálního prostředí.

4. Práce se sloupci a řádky tabulky

Právě se dostáváme do oblasti, ve které se tabulkový procesor sc stává – alespoň co do rychlosti a přesnosti editace – prakticky nedostižným. Sc totiž implementuje poměrně velké množství příkazů, které je možné použít při práci se sloupci a řádky tabulky. V následující tabulce jsou vypsány nejpoužívanější operace, které je možné se sloupci a řádky tabulky vykonávat. Pro lepší zapamatování příkazů jsem se pokusil zapsat i jejich anglický význam, nejedná se však o oficiální názvy. Všimněte si velké podobnosti těchto příkazů s příkazy, které jsou dostupné v textovém editoru vi. Druhé písmeno příkazů je vždy „r“ (row – řádek tabulky) nebo „c“ (column – sloupec tabulky), což do jisté míry odpovídá „objektovým“ příkazům dostupným z textového editoru vim. Podobně jako u textových editorů vi/vim, i u následujících příkazů je možné zvolit počet opakování přímým zadáním kladné číselné hodnoty (ovšem pouze za předpokladu, že není zapnuté rychlé vkládání hodnot do buněk tabulky – viz předchozí text, kde se tímto tématem zabýváme).

Klávesová zkratka Mnemotechnická zkratka Význam klávesové zkratky
ic Insert Column Vložení nového sloupce tabulky na sloupec, ve kterém se nachází buňkový kurzor. Vkládaný sloupec je prázdný.
ir Insert Row Vložení nového řádku tabulky na řádek, na kterém se nachází buňkový kurzor. Vkládaný řádek je prázdný.
oc Open Column Vložení nového sloupce tabulky za sloupec, na kterém se nachází buňkový kurzor. Vkládaný sloupec je prázdný.
or Open Row Vložení nového řádku tabulky za řádek, na kterém se nachází buňkový kurzor. Vkládaný řádek je prázdný.
ac Append Column Kopie sloupce, na kterém se nachází buňkový kurzor, směrem doprava.
ar Append Row Kopie řádku, na kterém se nachází buňkový kurzor, směrem dolů.
dc Delete Column Smazání sloupce, na kterém se nachází buňkový kurzor a zápis smazaných hodnot do bufferu.
dr Delete Row Smazání řádku, na kterém se nachází buňkový kurzor a zápis smazaných hodnot do bufferu.
dd Delete Cell Smazání hodnoty aktivní buňky a zápis smazané hodnoty do bufferu.
yc Yank Column Kopie sloupce s buňkovým kurzorem do bufferu.
yr Yank Row Kopie řádku s buňkovým kurzorem do bufferu.
yy Yank Cell Kopie aktivní buňky do bufferu.
pc Pull Column Vložení obsahu bufferu zpět do tabulky s posunem sloupců.
pr Pull Row Vložení obsahu bufferu zpět do tabulky s posunem řádků.
pp Pull-Paste Vložení obsahu bufferu bez posunu obsahu tabulky.
pm Pull and Merge Sloučení obsahu bufferu s obsahem buněk v tabulce.
pf Pull Formating Vložení formátovacích řetězců z bufferu do buněk tabulky (používá se ke kopii formátů).
px Pull and eXchange Záměna obsahu bufferu a příslušných buněk v tabulce.
pt Pull and Transpose Vložení obsahu bufferu do buněk tabulky s tím, že se vkládaný obsah transponuje (prohodí se řádky a sloupce). Velmi užitečný příkaz, zejména při zpracování databázových dat.
vc Values in Column Odstranění vzorců ze sloupce, ponechání číselných či řetězcových hodnot (vzorce se zkonvertují na svůj výsledek).
vr Values in Row Odstranění řádků ze sloupce, ponechání číselných či řetězcových hodnot.
Zc Zap Column Skrytí sloupce, ve kterém se nachází buňkový kurzor.
Zr Zap Row Skrytí řádku, ve kterém se nachází buňkový kurzor.
sc Show Column Zobrazení sloupce.
sr Show Row Zobrazení řádku.

5. Blokové operace

Ve čtvrté kapitole byly uvedeny příkazy, které je možné použít pro modifikaci, kopii, mazání, vkládání, skrývání a následné odkrývání řádků či sloupců zpracovávané tabulky. Kromě těchto operací však tabulkový procesor sc podporuje i práci s uživatelsky označovanými bloky. Práce s bloky je velmi jednoduchá a do jisté míry se podobá vizuálnímu režimu textového editoru vim. Po zadání jednoho z příkazů y (Yank), d (Delete) či Z (Zap) se místo označení sloupce či řádku může provést pohyb kurzorem, čímž se vybere určitá oblast. Po stlačení klávesy Enter je příslušný příkaz proveden. Všimněte si, že výběr oblasti není možné provést s příkazy a (Append), i (Insert), o (Open) a p (Pull) – u těchto příkazů se pracuje buď s jednotlivými řádky/sloupci nebo s obsahem bufferu, takže zadané rozměry jsou implicitně známé a není možné je měnit.

6. Operace nad zadanou oblastí

Blokové a formátovací operace se také mohou provádět nad libovolně zvolenou oblastí. Ve zvolené oblasti se dají provádět i poměrně složité operace, například výplň číselným vzorkem. Seznam operací prováděných nad zvolenou oblastí, je uveden v následující tabulce:

root_podpora

Klávesová zkratka Význam klávesové zkratky
rx Vymazání hodnot z oblasti.
ry Vložení obsahů buněk vybrané oblasti do bufferu.
rc Kopie zvolené oblasti do oblasti jiné.
rm Přesun zvolené oblasti na jiné místo v tabulce.
rv Ve zvolené oblasti jsou všechny vzorce vyčísleny a v buňkách jsou ponechány pouze hodnoty.
rs Setřídění buněk ve zvolené oblasti.
rf Vyplnění buněk ve zvolené oblasti hodnotou či vzorkem.
r{ Zarovnání řetězců doleva.
r} Zarovnání řetězců doprava.
r| Vycentrování řetězců.
rl Uzamčení buněk v oblasti – u složitějších tabulek velmi užitečný příkaz.
rU Odemčení buněk (musí se zadat velké písmeno „U“).

7. Obsah dalšího pokračování tohoto seriálu

V následující části seriálu, která bude současně i částí poslední, dokončíme popis tabulkového procesoru sc. Povíme si, jakým způsobem je možné vytvářet a používat makra, pomocí nichž lze práci s tabulkou do značné míry automatizovat, nebo dokonce vytvářet i celé složité nadstavby nad tímto tabulkovým procesorem.

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.