12.07.2015 Views

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

P R O G R A M U J E M EVytvorme teda nový formulár, ktorého obyvate¾mi budú komponent TBatchMove,komponent TTable, <strong>na</strong>zvaný Zdroj, a komponent Ttable, <strong>na</strong>zvaný Ciel. VlastnosTableName tabu¾ky Zdroj <strong>na</strong>stavíme <strong>na</strong> ANIMALS.DBF. Vlastnos Source komponentuTBatchMove <strong>na</strong>stavíme <strong>na</strong> Zdroj (ako vidíme, do vlastnosti Source nestaèí jednoduchovpísa cestu k databáze, ako by možno niektorí z vás oèakávali, vždy musíme zada komponenttypu TTable). Podobne budeme postupova aj s cie¾ovou tabu¾kou: vlastnosTableName <strong>na</strong>stavíme <strong>na</strong> Zver; vlastnos Desti<strong>na</strong>tion komponentuTBatchMove <strong>na</strong>stavíme <strong>na</strong> Ciel. Vlastnos Mode<strong>na</strong>stavíme <strong>na</strong> batAppend. Do vlastnosti ProblemTableNamevpíšeme cestu tabu¾ky, do ktorej sa majú uložiproblémové záz<strong>na</strong>my, a vlastnos AbortOnProblem <strong>na</strong>stavíme<strong>na</strong> false. Vlastnos ProblemTable <strong>na</strong>stavíme <strong>na</strong>C:\PROBLEM.DBF. Mapovanie polí <strong>na</strong>teraz vynecháme, abysme si ukázali, èo toto vynechanie spôsobí. Na komponentTBatchMove klikneme pravým tlaèidlom a z kontextovéhoObr. 3menu vyberieme Execute, èím sa spustí presun dát.Výsledný súbor, samozrejme, nie je správne usporiadaný(pozri obr. 3). S prvým po¾om nie je nijaký problém, pretože meno živoèícha je <strong>na</strong>prvom mieste aj v databáze ANIMALS.DBF, aj v <strong>na</strong>šej databáze. Druhé pole je však vzdrojovej a cie¾ovej databáze iné, v zdrojovej databáze druhé pole udáva ve¾kos živoèícha,zatia¾ èo v cie¾ovej to má by oblas , v ktorej zviera žije. Problém vyriešime kliknutím<strong>na</strong> vlastnos Mappings a <strong>na</strong>definovaním mapovania polí (obr. 4). Mapovanie polí jemožné <strong>na</strong>definova ve¾mi jednoducho, a to <strong>na</strong> základe vzorca PoleCie¾ovejTabu¾ky=PoleZdrojovejTabu¾ky. Ak po <strong>na</strong>stavení mapovania z kontextového menu vyberiemepoložku Execute, prenos dát bude u<strong>sk</strong>utoènený korektne, s výnimkou jedného záz<strong>na</strong>mu,ktorý bol presunutý do tabu¾ky PROBLEM.DBF. Príèi<strong>na</strong> tohto javu je ve¾mi jednoduchá:<strong>na</strong>šu databázu sme zámerne vytvorili tak,aby sa do nej tento záz<strong>na</strong>m jednoduchonezmestil; re azec v poli Area je totiždlhší ako <strong>na</strong>mi stanovená dåžka po¾aOblast. Urobili sme tak preto, aby sme simohli demonštrova prácu s problémovýmizáz<strong>na</strong>mami.Pokia¾ budete s programom experimentova, nezabudnite pred každýmObr. 4presunom dát vymaza cie¾ovú tabu¾ku– použili sme totiž parameter bat-Append a staré údaje sa tak samy nevymažú. Parameter batCopy sme nemohli použiz toho dôvodu, aby nedošlo k ovplyvneniu štruktúry tabu¾ky. Síce by neboli pridanénové polia, ale ve¾kos po¾a Oblast by sa zmenila z pôvodných 15 z<strong>na</strong>kov <strong>na</strong> 20 z<strong>na</strong>kov(èo je dåžka po¾a v tabu¾ke ANIMALS.DBF), v dôsledku èoho by nevznikli žiadne problémovézáz<strong>na</strong>my a my by sme si nemohli demonštrova použitie vlastnosti Problem-TableName.Ako vidíme, dokázali sme relatívne bezbolestne presunú dáta z dBase tabu¾ky dotabu¾ky typu Paradox, dokonca sme ani nemuseli <strong>sk</strong>ompilova program. Pre úplnos všakpripájam kód, ktorý vykoná to isté, èo sme pred chví¾kou urobili ruène. Nie je vôbeczložitý:procedure TForm1.BatchBtnClick(Sender: TObject);begintrytryscreen.Cursor:=crHourGlass;with BatchMove dobeginMappings.Clear;Mappings.Add(‘meno=<strong>na</strong>me’);Mappings.Add(‘oblast=area’);Execute;if ProblemCount>0 then ShowMessage(IntToStr(ProblemCount)+’ problémovýchzáz<strong>na</strong>mov’);end;//withexceptraiseend;//exceptfi<strong>na</strong>llyscreen.Cursor:=crDefault;end;//fi<strong>na</strong>llyend;Oproti predchádzajúcemu ruènému postupu je tu jed<strong>na</strong> výhoda: v prípade, že primanipulácii s dátami <strong>na</strong>stali problémy, procedúra nás o tom okamžite informuje (vzniknevýnimka).NABUDÚCE. Nabudúce si ukážeme, ako vytvára tabu¾ky poèas behu programu, apovieme si aj nieèo o poèítaných položkách (calculated fields). Dovidenia o mesiac.Ivan Zernovác ml.Delphi v praxi / 7. èas : ID3 TAG v1Každý z vás, kto aspoò letmo pozná formát hudby MP3, sa iste stretol s pojmom ID3TAG. Nosite¾om tejto informácie o <strong>sk</strong>ladbe je ten istý súbor, teda súbor MP3. V dnešnejdobe, keï pracujeme s väèším množstvom „MP trojok“, urèite nie je <strong>na</strong> škodu struènýzoz<strong>na</strong>m samotných súborov, respektíve informácií o <strong>sk</strong>ladbe. Tak sa ID3 TAG stáva jedinýmmožným riešením. Pomocou prehrávaèa, prípadne playlistu zistíme všetky potrebnéinformácie: interpreta, pomenovanie albumu, názov <strong>sk</strong>ladby. Takéto informácie je dobrévedie zapísa a aj preèíta . Je mnoho editorov ID3 TAG, dokonca aj samy prehrávaèe disponujútakouto možnos ou, ktorá nie je až taká komfortná. Ak vám takéto programy aprehrávaèe nevyhovujú, máte teraz možnos <strong>na</strong>uèi sa, ako si takýto program urobi .ID3 TAG. Rozlišujeme dva druhy, ktoré sa od základu líšia zápisom a umiestnením v súbore.Rov<strong>na</strong>ko ako väèši<strong>na</strong> programov aj popisy súborov MP3 sú oddelené verziami. Nemôžemtu vymenúva všetky doteraz existujúce verzie, lebo ani sám nemám preh¾ad, èosa toho týka. My si len spomenieme dve základné, ktoré sú <strong>na</strong>vzájom úplne odlišné.V tejto èasti si opíšeme iba ID3 TAG v1 a druhú verziu si podrobne rozoberieme v <strong>na</strong>sledujúcomvydaní.ID3 TAG V1. Zápis tejto informácie je umiestnený <strong>na</strong> konci súboru v posledných 128bitoch. Jednotlivé informácie sú obmedzené dåžkou, a to takto (tabu¾ka a obr. 1):Zaèiatok z<strong>na</strong>èený TAG3 bitNázov <strong>sk</strong>ladby30 bitInterpret30 bitNázov albumu30 bitRok4 bitKomentár29 bitÈíslo <strong>sk</strong>ladby1 bitŽáner1 bitObr. 1Urèite sa väèšine z vás nebude páèi jeden bit urèený pre èíslo <strong>sk</strong>ladby. Tým bol o jedenz<strong>na</strong>k <strong>sk</strong>rátený komentár. V opisoch sa tento bit neuvádza, ale väèši<strong>na</strong> prehrávaèov hopoužíva <strong>na</strong> zaz<strong>na</strong>me<strong>na</strong>nie poradového èísla, <strong>na</strong>príklad èísla <strong>sk</strong>ladby <strong>na</strong> CD. V koneènomdôsledku si musíme všetci uvedomi , že takýto opis si môžeme prispôsobi , tak ako chceme,ale si treba uvedomi potrebu používania štandardu. Keby sme chceli zapísa nejakýparameter, ktorý štandard nepodporuje, zásadne by sme ho nemali dáva <strong>na</strong> koniec súboru,ale mali by sme rozmýš¾a o uložení <strong>na</strong> iné miesto v súbore alebo o <strong>sk</strong>rátení niektorejhodnoty tak ako s predposledným bitom <strong>na</strong> uchovanie poradového èísla. Na obrázku 1je zobrazený opis pesnièky Blood Brothers od Iron Maiden z albumu Brawe New World zroku 2000. Komentár v tomto prípade nie je nijaký. Sú jasne vidite¾né všetky string informácie.Informácia o žánri a o poradovom èísle je zapísaná takisto <strong>na</strong> konci súboru vposledných dvoch bitoch. Nastal èas položi si otázku, ako to èo <strong>na</strong>jjednoduchšie preèíta, zobrazi a, samozrejme, aj editova .ÈÍTANIE ID3 TAG V1. Hneï <strong>na</strong> zaèiatok si musíme uvedomi , èo a v akej formebudeme èíta . Všetky hodnoty okrem èísla <strong>sk</strong>ladby a žánru by sme mohli považova zastring. Na zistenie èísla <strong>sk</strong>ladby sa nám <strong>na</strong>jviac hodí premenná typu byte, ako aj <strong>na</strong> zisteniežánru. Žáner je potrebné previes <strong>na</strong> zrozumite¾nejšiu hodnotu, a to pod¾a tabu¾kyžánrov <strong>na</strong> hodnotu string. Na to nám <strong>na</strong>jlepšie poslúži pole string, ktoré bude vyzeratakto.constMaxID3zaner=147;ID3zaner: array[0..MaxID3zaner] of string = (‘Blues’, ‘Classic Rock’, ‘Country’, ‘Dance’, ‘Disco’, ‘Funk’, ‘Grunge’,‘Hip-Hop’, ‘Jazz’, ‘Metal’, ‘New Age’, ‘Oldies’, ‘Other’, ‘Pop’, ‘R&B’,‘Rap’, ‘Reggae’, ‘Rock’, ‘Techno’, ‘Industrial’, ‘Alter<strong>na</strong>tive’, ‘Ska’,‘Death Metal’, ‘Pranks’, ‘Soundtrack’, ‘Euro-Techno’, ‘Ambient’,‘Trip-Hop’, ‘Vocal’, ‘Jazz+Funk’, ‘Fusion’, ‘Trance’, ‘Classical’,‘Instrumental’, ‘Acid’, ‘House’, ‘Game’, ‘Sound Clip’, ‘Gospel’,‘Noise’, ‘AlternRock’, ‘Bass’, ‘Soul’, ‘Punk’, ‘Space’, ‘Meditative’,‘Instrumental Pop’, ‘Instrumental Rock’, ‘Ethnic’, ‘Gothic’,‘Darkwave’, ‘Techno-Industrial’, ‘Electronic’, ‘Pop-Folk’,‘Eurodance’, ‘Dream’, ‘Southern Rock’, ‘Comedy’, ‘Cult’, ‘Gangsta’,‘Top 40’, ‘Christian Rap’, ‘Pop/Funk’, ‘Jungle’, ‘Native American’,‘Cabaret’, ‘New Wave’, ‘Psychadelic’, ‘Rave’, ‘Showtunes’, ‘Trailer’,‘Lo-Fi’, ‘Tribal’, ‘Acid Punk’, ‘Acid Jazz’, ‘Polka’, ‘Retro’,‘Musical’, ‘Rock & Roll’, ‘Hard Rock’, ‘Folk’, ‘Folk-Rock’,‘Natio<strong>na</strong>l Folk’, ‘Swing’, ‘Fast Fusion’, ‘Bebob’, ‘Latin’, ‘Revival’,‘Celtic’, ‘Bluegrass’, ‘Avantgarde’, ‘Gothic Rock’, ‘Progressive Rock’,10/2001 PC REVUE 129

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!