Warning
This page is located in archive.

Zpracování textu a regulární výrazy

Domácí příprava

Nastudujte použití regulárních výrazů a nástroje pro zpracování textu (alespoň zběžně grep, sed a tr):

Zadání úlohy

Vytvořte skript (soubor musí mít příponu .sh), který najde v HTML stránce odkazy na PDF soubory (skript nebude provádět syntaktickou ani sémantickou analýzu HTML, pouze najde části textu se zadanou strukturou). Skript bude HTML stránku buď stahovat z URL adresy (použijte nástroj wget), nebo ji obdrží na stdin.

Skript tedy

  • zkontroluje parametry. Je-li zadán přepínač -i, stránka se načte ze stdin, je-li zadán přepínač -u, čte se z URL adresy, která je argumentem přepínače (následující parametr)
    • kombinace obou přepínačů není přípustná a přepínač -u může být uveden maximálně jednou
    • při zadání neplatných přepínačů a argumentů skript vypíše chybovou hlášku a skončí s nenulovou návratovou hodnotou
    • pokud nelze stránku stáhnout z daného URL, skript skončí s návratovým kódem 1
  • nalezne v obsahu všechny odkazy na PDF soubory (poznáte je podle přípony .pdf – bez ohledu na velikost písmen) a
  • pro každý nalezený odkaz vypíše na standardní výstup jeho URL adresu (bez úpravy, tak jak je v souboru, adresa může být i relativní). Každý odkaz je vypsán na samostatný řádek.
  • skončí s návratovým kódem 0, pokud v průběhu nedojde k žádné chybě

Chybové hlášky vypisujte na chybový výstup začínající řetězcem “ERROR”. Dále můžete chybový výstup používat dle potřeby pro ladící výpisy.

Pokuste se vyhledávání napsat tak, aby našlo opravdu všechny odkazy. Bez ohledu na formátování příslušné značky (tagu), za předpokladu, že značka odkazu je validní.

POZOR v Unixových systémech může soubor obsahovat jakékoliv znaky kromě /. Zkuste spustit

touch '!@#$%^&*()_-;:<>?+\\.pdf'
, případně
touch ' '

Může se vám hodit definice syntaxe HTML.

Můžete předpokládat, že celá stránka je validní HTML a neobsahuje z hlediska této úlohy záludnosti typu:

<!-- <a href="..."> ... -->
<a title='hello href="asdf.pdf"' href=xxx>

Další požadavky k implementaci

  • při přepínači -h skript vypíše stručnou nápovědu a skončí (s návratovou hodnotou 0)
  • pokud není zadán žádný přepínač, nic se nevypíše a skript skončí s nenulovým exit kódem
  • na začátku skriptu musí být komentář s autorem a datem vzniku skriptu
  • URL adresy PDF souborů nikdy nebudou obsahovat znak konce řádky
  • pokuste se skript napsat tak, abyste šetřili pamětí a neukládali zbytečně celý dokument do proměnné, využívejte efektivně roury (pipes)
  • vlastní kód pro filtrování textu (sekvence rour) by měl být ve skriptu pouze 1x (pro varianty “-i” i “-u”).

Testování

Pro otestování vašeho skriptu byste si měli připravit vhodná testovací data. Některé případy můžete otestovat i proti této URL adrese:

https://cw.fel.cvut.cz/wiki/_media/courses/b4b35osy/cviceni/cviceni03_test_html.txt

Uvedený soubor sice není platná HTML stránka (hlavička s tagy <html> a <body> musela být odstraněna při nahrání na server cw), avšak Vaším úkolem není testovat korektnost celého dokumentu (což regulárními výrazy nejde), tak by to na výsledek nemělo mít vliv.

Materiály

Domácí příprava na další cvičení

Předpokládáme, že máte základní znalosti jazyka C a víte, jak funguje překlad ze zdrojových kódů jazyka C do binární spustitelné aplikace (v obecném případě, kdy je zdrojových souborů více).

Dále byste měli mít alespoň minimální povědomí o použití překladače gcc a jeho základních parametrech (gcc)

Nastudujte si použití nástroje make pro překlad programu v jazyku C/C++: make

Dále je pro absolvování cvičení nutné mít přehled o systémových voláních fork, pipe, dup, open, kill, wait a exec, tzn. měli byste vědět jak vzniká nový proces a jak lze přesměrovat standardní vstup a výstup. Potřebné informace se dozvíte na některé z předchozích přednášek.

courses/b4b35osy/cviceni/cviceni3_text.txt · Last modified: 2018/11/05 09:42 by stepan