PPWizard – práce s daty v externích souborech
PPWizard umí nejen vkládat celé externí soubory, či pouze jejich úryvky, ale také umí zpracovat soubory formátu CSV a zvládá i komunikaci s databázemi za využití jazyka SQL. Kromě toho umí z jednoho vstupního souboru generovat více výstupních souborů v různých formátech.
Vložení externího souboru
Zřejmě nejjednodušším a začátečníky nejhledanějším příkazem bude vložení externího souboru. Je jím příkaz #include
. Nejsnadněji ho lze použít pro vložení obsahu celého souboru:
#include “ soubor.ih“
#include „..soubor.ih“
#include „..<?DirSlash>soubor.ih“
#include „c:tempsoubor.ih“
#include „\mojepctempsoubor.ih“
V prvním případě, kdy zadáváme pouze název souboru, se tento soubor nejprve hledá v aktuálním adresáři. Jestliže nalezen není, hledá se v adresářích definovaných spouštěcí direktivou /INCLUDEPATH
. Pakliže ani zde PPWizard neuspěje, hledá v adresářích definovaných v systémové proměnné PPWIZARD_INCLUDE
. Poslední prohledávaný adresář je ten, ve kterém je uložen samotný PPWizard.
Na druhém a třetím řádku se soubory hledají v adresářích o úroveň vyšších než v předchozím případě, jinak je pořadí stejné. Třetí řádek je shodný s druhým až na drobný rozdíl, díky kterému se stává nezávislým na platformě. Oním drobným rozdílem je standardní definice <?DirSlash>
, obsahující oddělovač adresářů pro daný operační systém.
Čtvrtý a pátý řádek, myslím si, není třeba vysvětlovat. Soubory jsou tady jednoznačně určeny. Pokud neexistují, preprocesor při zpracovávání těchto příkazů skončí chybou.
Vložení části externího souboru
Příkazem #include
nemusíme vkládat vždy celé soubory, ale také třeba jen jejich části. Třetím parametrem lze definovat řetězec, kterým má být požadovaný fragment souboru vymezen.
#include „soubor.html“ „<!– obsah –>“
#include „soubor.html“ „se:|<body>|</body>|“
Na prvním řádku hledá PPWizard v souboru soubor.html posloupnost znaků <!-- obsah -->
. Jakmile ji nalezne, začne obsah souboru vkládat, dokud není přerušen opětovným uvedením stejného řetězce.
Na druhém řádku názorně vidíme, jak vymezit začátek a konec vkládaného fragmentu jiným řetězcem. Řetězec začneme se:
, pokračujeme oddělovačem, řetězcem pro začátek fragmentu, dalším oddělovačem, řetězcem pro konec fragmentu a posledním oddělovačem. Jako oddělovač je možné použít jakýkoli znak kromě písmena a číslice.
V řetězci nelze bohužel použít regulární výraz. Kdyby to šlo, příkazem #include
by se pěkně přistupovalo k obsahu XML souborů. Mimochodem, funkce pro práci s XML soubory bych vedle regulárních výrazů v PPWizardu opravdu ocenil.
Vložení souboru na úrovni projektu
V našem příkladu webu (viz první článek série) používáme příkaz #include
poněkud zvláštním způsobem. PPWizard totiž nabízí k tomuto jedinému příkazu ekvivalent pro příkazový řádek. V souboru projektu project.ppw máme zápis /#include:macros.ih
. Tímto parametrem PPWizardu říkáme, aby při zpracování vložil na úplný začátek každého souboru obsah souboru macros.ih.
Práce s CSV soubory a databázemi
Nejmocnější příkazem pro práci s externími daty je příkaz #import
. S ním můžete přistupovat k souborům typu CSV a k SQL rozhraním databází. V našem ukázkovém webu příkaz #import
v souboru imperdiet.it načítá data ze souboru imperdiet.csv do HTML tabulky. Jak asi tušíte, CSV formát je ideální pro ceníky a podobná tabulková data. Export CSV formátu umožňuje většina tabulkových procesorů.
Výtah ze souboru imperdiet.it:
#define IMPORT_#DATA TmpCsv
#(
#import „imperdiet.csv“ CMA „“ „name“ „num1“ „num2“
#)
<table>
<tr>
<th>Name</th>
<th>Num1</th>
<th>Num2</th>
</tr>
#{ FOR @@Record = 1 to <?Data:TmpCsv.?>
#if @@Record // 2 = 0
#RexxVar class = „sr“
#else
#RexxVar class = „lr“
#endif
<tr class=“<??class>“>
<td><?Data:TmpCsv.@@Record.1></td>
<td class=“num“><?Data:TmpCsv.@@Record.2></td>
<td class=“num“><?Data:TmpCsv.@@Record.3></td>
</tr>
#}
</table>
Pro názornost zredukujme tento celý kód na pouhý jeden řádek:
#import „imperdiet.csv“ CMA „“ „name“ „num1“ „num2“
PPWizardu tím říkáme, že soubor imperdiet.csv obsahuje na každém řádku tři údaje oddělené čárkou. Na výstup tento příkaz vypíše HTML tabulku s hlavičkou popisující první sloupec „name“, druhý „num1“ a třetí „num2“. Nevýhodou je, že se tabulka implicitně naformátuje ne vždy tím nejvhodnějším způsobem. Toto implicitní nastavení můžeme buďto přednastavit nebo můžeme využít cyklů a s výstupem importu pracovat jako s datovým polem.
Právě cyklů využíváme pro přizpůsobení výstupu. Pro pochopení ukázky si však musíme něco říci o datových polích. Ta se definují příkazem #data
. Definujme si třísloupcové pole „mojedata“:
#data mojedata 3
„a1“ „a2“ „a3“
„b1“ „b2 „b3“
#data
Pole je uloženo ve standardní definici <?Data:mojedata>
. Pro vypsání prvního řádku a třetího sloupce bychom použili zápis <?Data:mojedata.1.3>
. Počet řádků se skrývá pod <?Data:mojedata.?>
. Podrobnosti o datových polích najdete v oficiální dokumentaci u popisu funkce #data.
Datová pole už tedy známe a proto zpět k příkladu. Změřme se nyní na tuto konstrukci:
#define IMPORT_#DATA TmpCsv
#(
#import „imperdiet.csv“ CMA „“ „name“ „num1“ „num2“
#)
Tento, na prvním řádku tochu zvláštní, zápis, převádí soubor imperdiet.csv do datového pole „TmpCvs“. To je nyní k dispozici ve standardní definici <?Data:TmpSvc>
. (Definice <?Data:TmpSvc.?>
pak obsahuje počet řádků a <?Data:TmpSvc.x.y>
ypsilontý prvek na ikstém řádku.)
K tomuto datovému poli přistupujeme ve druhé části konstrukce za využítí opakování. Opakování začíná na řádku #{
a končí na #}
. S každým cyklem vypíšeme jeden řádek tabulky a zvýšíme hodnotu REXX proměnné „@@Record“ o jedna. Tato proměnná nám tak v jednotlivých cyklech odkazuje na záznam, jehož hodnoty vypisujeme. Navíc rozlišujeme lichý řádek od sudého.
Pokročilé možnosti příkazu #import
Základní syntaxe příkazu #import
je následující:
#import „File2Import“ „ImportType“ „DefineName“ „FieldInfo1“ …
- File2Import – jméno CSV souboru
- ImportType – typ importovaných dat. V příkladu jsme použili CMA, v němž se k oddělování údajů používá čárka. Dalšími možnosti jsou například:
- TAB – údaje oddělené tabulátorem
- SQL – přímý přístup k databázi skrze SQL rozhraní
- ML – údaje jsou odděleny koncem řádku a položky prázdným řádkem
- ??? – použití libovolného oddělovače, v tomto případě znaku „?“
- DefineName – jméno konfigurační řady importu. Implicitní hodnota (pokud není uvedena) je „IMPORT“.
- Další parametry jsou názvy položek jednotlivých záznamů. Povinné jsou jen pro některé typy importovaných dat. Vypisují se do hlavičky tabulky, pokud je přímým výstupem příkazu
#import
.
Ve výčtu jsem nakousl konfigurační řady příkazu #import
. Podle typu vstupních dat máme škálu konfiguračních parametrů, kterými si lze přizpůsobit vstup i výstup. Tyto parametry se definují před spuštěním příkazu #import
příkazem #define
. Jejich jméno začíná vždy jménem konfigurační řady (hodnota „DefineName“ u příkazu #import
) importu, pokračuje znakem „_“ (podtržítko) a končí samotným konfiguračním parametrem. Například takto bychom změnili implicitní nastavení vypisované tabulky:
#define IMPORT_TABLE_ATTRIBS border=“0″ cellspacing=“0″ cellpadding=“0″
Jde vlastně o definici makra, jehož jméno je již implicitně v PPWizardu předurčené pro zkrocení výstupu příkazu #import
. O tento typ makra jde i na řádku #define IMPORT_#DATA TmpCsv
.
Kdybych měl podrobně probrat příkaz #import
, potřeboval bych na to daleko více místa než jeden článek a přitom bych čtenáře zbytečně zahltil podrobnostmi. Proto jsem se snažil nastínit jen to nejpodstatnější a podat obecný přehled o příkazu. Dále vás již odkáži do oficiální dokumentace na popis funkce #import. Pokud chcete v PPWizardu pracovat s SQL databázemi, pak vás odkáži do oficiální dokumentace na stránky Accessing SQL DATABASES Directly a #import – SQL.
Výstup do jiného souboru
Posledním příkazem, na který se v tomto článku podíváme, je příkaz #output
, se kterým lze přesměrovat výstup do jiného souboru. Příklad:
#output „test.txt“
Soubor test.txt
#output
…
#output „test.txt“ Append
Druhý řádek souboru test.txt
#output „test2.txt“
Soubor test2.txt
#output
Třetí řádek souboru test.txt
#output
Na prvním řádku přesměrujeme výstup ze standardního souboru na soubor test.txt. Pokud soubor existuje, bude jeho obsah přepsán. Na třetím řádku, tedy příkazem #output
bez parametru, vrátíme výstup do původního souboru. Na čtvrtém řádku opět přepneme výstup do souboru test.txt. Příkazem Append
zajistíme, aby byl původní soubor zachován a text byl připojen na jeho konec. Výstupem do souboru test2.txt demonstrujeme, že lze příkaz #output
neomezeně vnořovat.
Odkazy, zdroje
- #data – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- #import – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- #include – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- #output – Dennis Bareis (PPWizard manual, 30. 7. 2004)
- /#include – Dennis Bareis (PPWizard manual, 30. 7. 2004)
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Vstupte do éry umělé inteligence: ASOME Max Studio s AMD Ryzen™ 9 7940HS
14. listopadu 2023 -
Monitory OLED: klíčové pojmy a funkce
13. května 2024 -
inPage AI: Revoluční nástroj pro tvorbu webů
3. července 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024