Navigace

Hlavnφ menu

 

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:\temp\soubor.ih"
#include "\\mojepc\temp\soubor.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)
Bien, Jan (14. 8. 2004)
autor spravuje odborn² web MraveniÜt∞