STANDARDNÍ VSTUP A VÝSTUP | ||
PATRICK TJ MCPHEE: mail Re: AS/400 v comp.lang.rexx 5. 2. 1999 |
Příkazem parse linein můžeme číst z jediného souboru STDIN a příkazem say zapisovat do jediného souboru STDOUT. Oba soubory musí být určeny před jejich prvním použitím, jednou jen a pak už ne. Omezení? Ukážu vám první možnost, jak je překonat. Programy v jazyce Rexx se vždy interpretují. Mohou být spuštěny buď v interaktivním prostředí (tak tomu bylo v předcházejícím příkladě) nebo v dávkovém prostředí. Interpretovaný program má přístup ke dvěma souborům pro standardní vstupní a výstupní operace. Standardním souborem pro vstup je STDIN; standardním souborem pro výstup je STDOUT. Je tu ještě jeden výstupní soubor, totiž STDERR, který používá interpret k zápisu chybových hlášení a informací o průběhu výpočtu vyžádaných příkazem trace. Příkaz parse linein čte ze souboru STDIN a příkaz say zapisuje do souboru STDOUT. Implicitně se v interaktivním režimu považuje za STDIN klávesnice a za STDOUT displej. V dávkovém režimu se implicitně považuje za STDIN soubor se jménem QINLINE a za STDOUT spoolový soubor QPRINT. Implicitní nasměrování souborů STDIN a STDOUT můžete změnit pomocí CL povelů začínajících OVR..., ale tyto povely musí být vydány před prvním použitím souboru STDIN nebo souboru STDOUT a v průběhu programu už nasměrování nelze znovu změnit. Možná si teď říkáte Chudáček Rexx, co to s ním v té čtyřstovce udělali .... Ukážu vám, jak se mohou snadno spojit silné prostředky jazyka Rexx a AS/400 pro extrémně snadné řešení jinak nijak jednoduché úlohy. Naším cílem bude napsat program, který v zadaném textu (předložen na vstupu jako první člen souboru INFO v knihovně MYLIB) určí, kolikrát se v něm to které slovo vyskytlo. Pojmem slovo tu rozumím posloupnost znaků neobsahující mezeru, jak je v Rexxu obvyklé. Řešení ukazuje následující program KOLIKRAT:
Program ukazuje využití asociativního pole a CL povelů. RTVMBRD (Retrieve Member Description) povel vrací v proměnné Citac počet vět vstupního souboru. Této proměnné se říká pseudo-CL proměnná. Její jméno musí začínat znakem &. OVRDBF (Override with Data Base File) povel přesměrovává STDIN k souboru INFO v knihovně MYLIB. V interaktivním prostředí uvidíme výsledek na displeji. Pokud by měl být zapsán na papíře, máme dvě možnosti. Můžeme přidat k textu programu povel 'OVRPRTF FILE(STDOUT) TOFILE(QSYSPRT)' nebo povelem SBMJOB (Submit Job) předat interpretaci programu do dávkového prostředí: SBMJOB CMD(STRREXPRC SRCMBR(KOLIKRAT) SRCFILE(MYLIB/QREXSRC)) Aby mohl být program KOLIKRAT opravdu užitečný, musí být výsledek utříděn. Jak to udělat co nejjednodušeji? Využívej systémových prostředků radí Jon Bentley v knize Programming Pearls. V systému OS/400 je nejjednodušším řešením zapsat výsledek do souboru a tento soubor pak jednoduše utřídit předem připraveným dotazem (tzv. query v terminologii AS/400) s výstupem na displej. Query/400 je generátor výstupních sestav z databázových souborů. Je jednoduchý a snadno se jej naučíte používat. Vytvoření a použití query vám opět ukážu krok za krokem.
Nejprve pomocí povelu systému CRTPF MYLIB/OUTPUT RCDLEN(80) vytvoříme soubor OUTPUT. Budeme předpokládat, že v něm budou zapsány dvojice hodnot počet výskytů slova a slovo samo oddělené mezerou. Teď sestavíme potřebné query na tento soubor. Napište WRKQRY na povelovou řádku a stiskněte Enter. Formulář, který se objeví na obrazovce, vyplňte, jak je ukázáno na dalším obrázku a stiskněte Enter.
Stiskněte Enter v obrazovce Define the Query s implicitní hodnotou 1 (tj. Select) v poli volby u kolonky Specify file selections. V následující obrazovce Specify File Selection napište jméno souboru (OUTPUT) a jméno knihovny (MYLIB). Stiskněte Enter.
Vrátíte se k Define the Query obrazovce. Napište 1 do pole volby u kolonky Select sort fields. Teď se dostáváme k vlastnímu třídění. Na této obrazovce (vidíte ji dole) zvolíte pole, které bude tříděno, prioritu třídění v sloupci Sort Prty (důležité, obsahuje-li soubor více polí). A to, co nás nejvíce zajímá, způsob třídění: vzestupně (ascending), sestupně (descending). Do sloupce A/D zapište volbu D.
Potvrďte klávesou Enter. Zase se vrátíte k obrazovce Define the Query. Teď stiskněte F3 pro ukončení. V následující obrazovce Exit this Query přesuňte kurzor na pole volby Run a napište 3 (Do not run). Stiskněte Enter - query je uloženo. Klávesou F3 opustíte prostředí Work with Queries.
Změňte program KOLIKRAT tak, aby dvojice hodnot počet výskytů a slovo byly uloženy do souboru OUTPUT. Protože výsledek bude tříděn podle počtu výskytů, použijte příkaz: say FORMAT(Kolikrat.Slovo, 5) Slovo Přidejte k programu KOLIKRAT provedení query SLOVA a na samém začátku vymažte momentální obsah souboru OUTPUT povelem CLRPFM FILE(MYLIB/OUTPUT).
V definici query můžete snadno přesměrovat výstup (na displej, do souboru, do spoolu). Vidíte? Výstup z programu byl už přesměrován do souboru OUTPUT povelem 'OVRDBF FILE(STDOUT) ...' a přece výsledek vystupuje na displeji!
|