Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Gooo 19. 04. 2014, 12:58:24
-
Dobrý den
Řeším domácí úkol a popravdě netuším, jak na to. Mám odkaz, který příkazem wget stáhnu do složky. Jedná se o tabulku v HTML formátu a soubor je .php.
Tabulka má 4 sloupce a úkol zní, že mám sloupce prohodit (sloupec na druhém místě mám přesunout na první a čtvrtý na druhý) a zároveň mám seřadit data vzestupně dle data ve druhém sloupci (druhý sloupec jsou datumy).
Nedaří se mi najít správný nástroj, kterým bych tuto operaci zvládl udělat. V podkladech mi přišel jako vhodný nástroj "cat", kterým zobrazím soubor (a vyjede mi ona HTML tabulka). Tak jsem zkoušel nástroj "cut" ve formátu:
cut -d' ' -f1
a doufal jsem, že se mi zobrazí první sloupec. Vhodným vybráním sloupců bych alespoň uměl první část a nějak vyfiltruji data, které mě zajímají. Jako volbu oddělovače jsem za -d vybral mezeru a tudíž mi to vyhodilo nesmysl. Protože se ale jedná o HTML tabulku, nevím jaký vhodný oddělovač vybrat.
Možnosti tedy nyní jsou:
- Transformovat "nějak" soubor .php do txt, kde budou sloupce odděleny specifickým znakem. Pak v txt udělat úpravy a překonvertovat to do .php?
- Umět najít nějaký vhodný oddělovač již v .php souboru?
- Udělat to úplně nějak jinak (nejpravděpodobnější)?
Popravdě, mohu si ten soubor hodit do calcu, převedu do požadovaného formátu a pak z něj udělám .php a nikdo nic nepozná, ale nějak bych rád to zkusil takhle. Googlím už pár dnů a nic mě nenapadá. Poradí někdo?
-
Zkoušel jste awk? http://stackoverflow.com/questions/6854586/extract-data-from-html-table-with-bash-script
-
sort a sloupec + awk a je to doma :) somozrejme cest je vice treba pres grep nebo cokoliv jinyho chces
-
Misto wgetu bych pouzil "lynx" s parametrem -dump. To prekonvertuje HTML tabulku do vhodneho formatu.
Pak bych to prohnal pres while. Neco jako:
lynx -dump $url | while read sloupec1 sloupec2 sloupec3 sloupec4; do
echo $sloupec2 $sloupec4 $sloupec1 $sloupec3
done
-
A zadání je, že to musí být pomocí bash a Linuxových utilit nebo proč to chceš dělat takhle? Parsovat HTML pomocí regulárních výrazů je docela zoufalost. Tohle bych prostě naprogramoval v nějakém vyšším jazyce podle toho co umíš (v mém případě by to byla Java) pomocí vhodných komponent - nějaká http klient a html parser.
-
Není potřeba nic moc programovat.
Stažení: wget
Transformace: xsltproc
(pokud to bude nevalidní HTML hnůj, tak tam ještě vložíš HTML tidy, aby to opravilo a dalo se to parsovat)
wget -O - http://… | tidy … | xsltproc šablona.xsl > výstup.xml # nebo výstup.txt
Tobě stačí si napsat jednoduchou XSLT šablonu, která najde tu tabulku (podle pořadí, identifikátoru, třídy atd.) a vypíše sloupečky tak, jak potřebuješ.
-
No, predmet ma nazev administrace systemu a prakticky je to jen o linuxu. Zadani zni:
Tato data obsahují HTML tabulku se jmény, e-maily, městy a daty přihlášení studentů k nějakému kurzu.
Pomocí dostupných unixových nástrojů transformujte získaná data do podoby:
Jméno <email>: datum
Soubor seřaďte podle datumu..
Výsledný soubor opět publikujte na webu do Vašeho podadresáře.
takze princip je udelat to skrze putty na skolnim serveru.
-
V tom případě bys měl projít doporučenou literaturu a naučit se to udělat, nebo zadání počítá s tím že to někdo na Rootu udělá za tebe?
-
V zadání tak trochu cítím "použijte sort, awk, sed apod.", ale to mi přijdou zrovna na tohle celkem nevhodné nástroje. Co je to dostupný UNIXový nástroj? Pokud máš přístup k internetu, tak je dostupné prakticky cokoli, co lze stáhnout, použít zdarma a funguje pod UNIXem. Jinak pro tohle se hodí něco, co obsahuje HTML parser (nebo něco, co z toho udělá validní XML a pak XML parser). Tedy nějaký vyšší programovací/skriptovací jazyk s příslušnými knihovnami.
-
V zadání tak trochu cítím "použijte sort, awk, sed apod.", ale to mi přijdou zrovna na tohle celkem nevhodné nástroje.
+1
Ono to HTML možná bude napsané tak, aby těmito nástroji šlo snadno zpracovat a je to asi pointa té úlohy… ale není to obecné řešení a v praxi si na tom člověk vyláme zuby, protože kdejaké HTML stažené z Internetu (ne připravené učitelem) bude obsahovat takový hnůj, že to tímhle zpracovat nepůjde.
-
V tom případě bys měl projít doporučenou literaturu a naučit se to udělat, nebo zadání počítá s tím že to někdo na Rootu udělá za tebe?
Nebudu lhát, že jsem na podobnou odpověď nečekal :o). Jak jsem psal, hledám radu, to znamená nakopnutí, na které příkazy se zaměřit. V žádném případě jsem nehledal někoho, kdo toto zadání vypracuje (ani sem nedávám odkaz na onu tabulku). Také jsem napsal, že vím jak to obejít a udělat například pomocí excelu tak, aby byl vyhotoven výsledek a také jsem dodal, že to není mým cílem.
Omlouvám se za tuto reakci, ale Vaši odpověď tedy může napsat jenom trouba.
Druhá věc je, že není vš tak jednobarevné. Předmět o kterém je řeč jsme v tomto semestru měli jeden dvouhodinový blok, kde byla přednáška o historii linuxu a studijní opora je řešena zasláním pěti PPS prezentací. A protože jsem trouba a z těch prezentací jsem to nepochopil, googlil jsem základy administrace linuxu a pak jsem podal dotaz zde. Paradoxně si jsem jist, že i když pokusy s vyhotovením úkolu dopadly neúspěšně, ono vyhledávání informací a také slepé cesty znamenaly, že ve mě nějaké informace přece jen zůstaly a to je smysl takových úkolů.
Takže, jestliže někdo špatně dotaz pochopil a já jsem jej urazil, omlouvám se :o)
-
Tu tabulku si sem dát spíš měl, protože pokud je to jedna konkrétní konkrétně formátovaná tabulka, tak je to úplně jiná úloha než když by to mělo být schopno prohodit sloupce v libovolné HTML tabulce. Pokud je to ideálně formátovaná tabulka jako v tom dotazu na Stackoverflow co sem dal Strašidlo, tak to půjde snadno pomoci awk jak je tam rovněž uvedeno a má smysl to takto zkoušet. Ale i tak mi to nepřijde jako vhodná úloha do předmětu "administrace systému", i když z názvu je těžko odhadovat podrobnější náplň předmětu.
To, že si zadání zkomolil a zamlžil, akorát odvádí diskusi nesmyslným směrem, protože si tu některé věci, které jsou dané zbytečně a často chybně musíme domýšlet.
co je standardní nástroj je skutečně diskutabilní, Java je v repozitářích majoritních Linuxových dister a je doinstalovatená jedním příkazem, Python se snad dokonce instaluje v základu. Taky je otázka zda se OS založené na Linuxu dají považovat za UNIX.
-
wget -O - http://… | tidy … | xsltproc šablona.xsl > výstup.xml # nebo výstup.txt
Tidy tam není potřebné, xsltproc má parametr --html. Viz
https://gist.github.com/kitsaels/11144830 (https://gist.github.com/kitsaels/11144830)