8.2. Příkaz READ Formát: READ jméno-souboru [NEXT | PREVIOUS] RECORD [INTO položka] [SECONDARY KEY celé-číslo] - - | AT END příkaz ... | | INVALID KEY příkaz ...| - - Funkce: Nedojde-li k výjimečnému stavu ( tj. k uplatnění klauzule AT END resp. INVALID KEY, je-li uvedena), přečte příkaz READ jednu logickou větu souboru dat a umístí ji do společné paměťové oblasti všech 01 souboru. Je-li pro soubor popsáno více 01, musí uživatel po provedení příkazu READ sám zjistit, jakého typu je ta logická věta, která se do společné oblasti všech 01 právě přečetla. Rozlišení funkce příkazu READ dle typu organizace souboru je uvedeno v odstavcích 8.7, 8.8 a 8.9. Pravidla: 1) Je-li v příkazu READ uvedena klauzule "INTO položka", bude po úspěšném přečtení logické věty ještě proveden přesun MOVE logická-věta TO položka kde "logická-věta" znamená tu 01 souboru, která je ze všech 01 popsána jako první. Položka uvedená za slovem INTO smí mít libovolný typ i délku (s výjimkou USAGE INDEX). Přesun smí být jakéhokoliv typu, např. i numerický. Přečtená logická věta je pak přístupná jak v 01, tak i v položce uvedené za slovem INTO. Při vzniku mimořádného stavu (tj. při uplatnění klauzule AT END resp. INVALID KEY, je-li uvedena) se přesun neprovádí a původní obsah položky uvedené ze slovem INTO se nezmění. 2) Pokud uživatel obsah 01 sám nezmění, bude přečtená logická věta uchována beze změny v 01 až do provedení dalšího příkazu READ anebo do příkazu CLOSE (příkaz REWRITE resp. WRITE opravující logickou větu nemění obsah 01). 3) Klauzule AT END je přípustná pouze při sekvenčním přístupu. Uplatní se při tzv. "konci souboru", tj. při provádění toho příkazu READ, který následuje po přečtení poslední logické věty souboru dat. Je-li uvedeno PREVIOUS, tak po přečtení první logické věty. 4) Dojde-li při sekvenčním čtení indexového souboru k uplatnění klauzule AT END, tak následující příkaz READ s NEXT (resp. PREVIOUS) přečte (první resp.poslední) logickou větu souboru a příznak AT END se zruší, takže lze v sekvenčním čtení pokračovat. 5) Po "konci souboru" je nutné soubor uzavřít příkazem CLOSE, u indexové souboru je mimoto přípustný též příkaz START (při ACCESS DYNAMIC i příkaz READ nebo WRITE); jiné příkazy pro tento soubor smí následovat až po uzavření souboru a jeho novém otevření (u indexového souboru též po provedení příkazu READ nebo WRITE). 6) Klauzule INVALID KEY je přípustná pouze při přímém přístupu. Uplatní se tehdy, když logickou větu není možno přečíst (viz 8.8 a 8.9). 7) Slova NEXT a PREVIOUS jsou přípustná pouze u indexového a relativního souboru s ACCESS DYNAMIC (viz 8.9.4.). Pomocí něj se určuje, zda se jedná o sekvenční čtení (při READ s NEXT nebo s AT END) anebo o přímé čtení (při READ bez NEXT i bez AT END). Slovo NEXT může být sice uvedeno i u sekvenčního, relativního nebo indexového souboru s ACCESS SEQUENTIAL (resp. s vynechanou klauzulí ACCESS), zde je však považováno za poznámku a ignoruje se, neboť čtení je vždy sekvenční. Je-li uvedeno NEXT, přečte se následující logická věta v pořadí, je-li uvedeno PREVIOUS, přečte se předcházející věta v pořadí. 8) Klauzule "SECONDARY KEY celé-číslo" je přípustná pouze u indexového souboru s ACCESS RANDOM nebo ACCESS DYNAMIC pouze při přímém čtení (tzn. při READ bez NEXT i bez AT END). Klauzule způsobí, že tento příkaz READ bude pracovat podle sekundárního klíče s pořadovým číslem rovným celému číslu uvedeným za SECONDARY KEY (viz 8.9.3.). 9) Je-li zadán parametr CBL TALLY, bude po provedení příkazu READ, kterým se přečetla logická věta souboru s RECORDING V, do položky TALLY dosazena délka právě přečtené logické věty. Bez použití parametru CBL TALLY uživatel délku přečtené logické věty nedostává a musí si ji zjistit sám (nejobvyklejší je mít na vhodném místě v každé logické větě uloženu buďto přímo tuto délku anebo nějaký údaj, z něhož se dá délka logické věty vypočítat). Příklady: READ KNIHA AT END CLOSE KNIHA GO TO KNIHOVNA. READ OREL INTO SOKOL READ MZDY SECONDARY 2 INVALID PERFORM OSETRENI.