wc

wc - print newline, word, and byte counts for each file

Motivácia

V rámci tohto cvičenia urobíte jednoduchú alternatívu pre nástroj wcTento nástroj dokáže poskytnúť niekoľko základných informácií o textových súboroch v OS Linux a to: počet riadkov, počet slov a počet znakov (bytov) nachádzajúcich sa v súbore.

Ciele

  1. Naučiť sa pracovať so súbormi v jazyku C.
  2. Precvičiť si spracovanie parametrov príkazového riadku.
  3. Precvičiť si používanie regulárnych výrazov na analýzu parametrov príkazového riadku.

Postup

Krok #1: Running wc

V prvom kroku sa pozrieme na spúšťanie nástroja wc. Ošetríte teda všetky možnosti a spôsoby, ktorými je možné tento nástroj z príkazového riadku spustiť.

Úloha 1.1

Zoznámte sa s používaním príkazu wc v operačnom systéme OS Linux.

Nástroj wc nájdete v každej distribúcii OS Linux. Pre bližšie zoznámenie sa s príkazom môžete použiť manuálovú stránku príkazu:

$ man wc

Pre jednoduchosť je možné príkaz wc použiť s nasledujúcimi parametrami:

  • -l - príkaz vypíše na obrazovku počet riadkov v súbore
  • -w - príkaz vypíše na obrazovku počet slov v súbore
  • -b - príkaz vypíše na obrazovku počet bytov (znakov) v súbore

Ak nie je zadaný ani jeden z týchto prepínačov, príkaz výpiše počet všetkých prvkov v poradí: počet riadkov, počet slov a počet znakov, napr.:


$ wc rooms.txt 
  24  382 2124 rooms.txt
                        

Úloha 1.2

Vytvorte regulárny výraz, pomocou ktorého budete vedieť analyzovať parametre príkazového riadku nástroja wc.
Pre analyzovanie parametrov príkazového riadku nástroja wc vám výborne poslúžia regulárne výrazy. Pokúste sa teda zostaviť regulárny výraz, pomocou ktorého budete vedieť vyhodnotiť, či sa nástroj spúšťa korektne alebo nie.
Poznámka:  Nezabudnite na to, že je možné príkaz wc spustiť v kombinácii ktorýchkoľvek prepínačov. To znamená, že sa môžete naraz opýtať na počet riadkov a aj na počet slov nachádzajúcich sa v súbore.

Úloha 1.3

Vytvorte kostru programu s názvom wc.c, v ktorom analyzujete parametre príkazového riadku nástroja wc.
Aplikujte vytvorený regulárny výraz pri analyzovaní parametrov príkazového riadku vášho nového programu. V prípade, že používateľ zadal parametre nesprávne, vypíšte na obrazovku pomocníka príkazu (zobrazí sa voľbou --help).

Úloha 1.4

Overte správnosť svojej implementácie.
Overte, či vami vytvorený regulárny výraz funguje v poriadku spúšťaním vášho nástroja rôznymi spôsobmi. Nezabudnite rovnako overiť aj nesprávne (resp. neexistujúce) parametre.

Úloha 1.5

Overte existenciu zadaného súboru programu.
Ukončite program, ak súbor neexistuje, resp. nemáte k nemu prístup.

Úloha 1.6

Overte správnosť svojej implementácie.
Overte funkcionalitu vášho programu zadaním rozličných existujúcich aj neexistujúcich súborov. Overte rovnako aj prípad, keď súbor bude v parametroch príkazového riadku chýbať. Aj tento prípad považujte za chybu, aj keď originálny nástroj dokáže pracovať aj so štandardným vstupom miesto konkrétneho súboru.

Krok #2: The Core

Úloha 2.1

Aktualizujte program tak, aby ste vypísali počet znakov nachádzajúcich sa v súbore.
Ak bol program spustený s parametrom -b, vypíšte na obrazovku počet znakov (bytov), ktoré sa nachádzajú v súbore. Vo výsledku sa budú nachádzať všetky znaky, ktoré sa v súbore nachádzajú (aj biele).

Úloha 2.2

Overte správnosť svojej implementácie.
Svoju implementáciu si overte spustením originálneho nástroja wc a vašej implementácie nad rovnakým textovým súborom. Pokiaľ je vaša implementácia správna, výsledok oboch nástrojov bude zhodný.

Úloha 2.3

Aktualizujte program tak, aby ste vypísali počet slov nachádzajúcich sa v súbore.
Ak bol program spustený s parametrom -w, vypíšte na obrazovku aj počet slov, ktoré sa nachádzajú v súbore.
Poznámka:  Ak bol náhodou program spustený aj s iným parametrom (napr. s parametrom -b pre zistenie počtu znakov nachádzajúcich sa v súbore) a tento počet bol zistený, aktuálna pozícia na čítanie sa v súbore bude nachádzať na jeho konci. Ak chcete tento súbor začať prechádzať znova, máte dve možnosti:
  1. buď súbor zavriete a znovu ho otvoríte, čím sa nastaví pozícia na čítanie na jeho úplný začiatok, alebo
  2. použijete funkciu fseek() na nastavenie novej pozície v súbore.

Úloha 2.4

Overte správnosť svojej implementácie.
Svoju implementáciu si overte spustením originálneho nástroja wc a vašej implementácie nad rovnakým textovým súborom. Pokiaľ je vaša implementácia správna, výsledok oboch nástrojov bude zhodný.

Úloha 2.5

Aktualizujte program tak, aby ste vypísali počet riadkov nachádzajúcich sa v súbore.
Ak bol program spustený s parametrom -l, vypíšte na obrazovku počet riadkov, ktoré sa nachádzajú v súbore.

Úloha 2.6

Overte správnosť svojej implementácie.
Svoju implementáciu si overte spustením originálneho nástroja wc a vašej implementácie nad rovnakým textovým súborom. Pokiaľ je vaša implementácia správna, výsledok oboch nástrojov bude zhodný.

Doplnkové úlohy

  1. Vytvorte zjednodušenú alternatívu v jazyku *C* pre nástroj diff, pomocou ktorého zistíte, či sú dva súbory zhodné alebo nie. V prípade zhody alebo nezhody len nastavte návratový kód vašej aplikácie na hodnotu *0*, ak sú súbory zhodné alebo na hodnotu *1*, ak súbory zhodné nie sú.

Diskusia

Upozornenie: Do svojich príspevkov nevkladajte správne riešenia úloh a ani ich od ostatných nežiadajte! Nepoužívajte sprosté slová! Takéto príspevky budú zmazané! Riaďte sa podľa pravidiel etického kódexu.