#14 Peppy
A potom ťa bude zaujímať 80-tý riadok, 120. riadok, potom po čase zistíš, že ti treba 30-tý riadok. Opäť po čase ti bude treba 100. riadok, potom zase 50. riadok, and so on and so futher, fakt je "efektívne" prechádzať riadky Xkrát, namôjveru efektivita jak remeň...
Nebudu se hádat. Evidentně se pletu, když nevidím nutnost to celé znovu načítat, až mě začne zajímat nějaký jiný řádek. Evidentně není normální projít ten vstup jednou (tady ještě spor není) a uložit si z něj jenom to, co mě zajímá (tady už se neshodujeme). Nikde jsem nenapsal, že musím vždy začít čtení od začátku (naopak jsem zmínil např. čtení ze stdin, kde se to prostě najednou načíst musí). Pokud mě zajímá v tom vstupu více míst, tak samozřejmě skončím, až je najdu všechny. Já si (zřejmě chybně) myslím, že když už vím, že nic dalšího z toho vstupu nebudu potřebovat, tak to prostě nebudu číst. Evidentně je lepší to nejdřív celé načíst a pak z toho 99% vyhodit. Např. pokud konfigurační soubor obsahuje i poznámky, tak teď už vím, že si je mám uložit a pak je při hledání něčeho konkrétního jenom přeskakovat. Hlavně nezjišťovat hned při čtení, že v tom pro ten program nic zajímavého není, to je předčasné.
Je to stejné jako obvyklé "enterprise" řešení úlohy typu "očíslujte vzestupně všechny řádky celého souboru". Správné enterprise řešení je načíst celý soubor do vektoru v paměti a pak ten vektor postupně projít a vypisovat na výstup (samozřejmě použít vektor, list nebrat, co kdyby někdy někdo potřeboval náhodný přístup. Ale ještě víc "enterprise" je naprogramovat vlastní vektor). Špatné řešení (vhodné jenom pro hobby programy) je postupné čtení, které to rovnou čísluje a cpe do výstupu. Výhody enterprise řešení: dá to stejně práce jako hobby řešení, načítání může dělat jiný team než vypisování, sežere to víc paměti, první řádek výstupu mám k dispozici až po načtení celého vstupu. Nevýhody hobby řešení: není třeba dělat extra verzi pro čtení souboru někde z internetu, nečte to zbytečně konec vstupu v případě, kdy už vím, že z něj nic nevyužiju (takže vlastně nemusím poznat, že konec vstupu nejde číst), výstup můžu tvořit už ve chvíli, kdy ještě nemám načten kompletní vstup.
Rozdíl pracnosti vývoje:
-
načtení jednoho řádku - potřebuji v obou variantách - stejné
-
zpracování řádku tak, abych zjistil, jestli mě zajímá - potřebuji v obou variantách - stejné
-
uložení načteného řádku - buď ukládám všechno nebo jenom ten, který mě zajímá - pracnost programování stejná, při běhu programu samozřejmě proběhne jenom pro ty řádky, které ukládám
A mimochodem, zadání bylo: Ahoj, potřeboval bych poradit, jak v Céčku docílit toho, abych mohl načíst třeba druhý řádek z CSV souboru, bez toho aby program načetl všechny ostatní. Jako řešení nenačítání ostatních řádků mi nepřipadá načtení všech.