8.1. Příkaz OPEN Formát: - - - - | |INPUT | - - - - | | |OUTPUT| | | REVERSED | | | OPEN < < I-O > < jméno-souboru |WITH NO REWIND| > ... > ... | |EXTEND| | - - | | - - - - - - Pravidla: 1) V příkazu OPEN musí být uvedeno jedno nebo více slov INPUT, OUTPUT, I-O, EXTEND (v libovolném pořadí), přičemž za každým z nich musí následovat jedno nebo více jmen souborů; o těchto souborech říkáme, že jsou otevírány "OPEN INPUT" resp. "OPEN OUTPUT" resp. "OPEN I-O" resp. "OPEN EXTEND". 2) Volba "OPEN OUTPUT" znamená prvotní vytváření souboru dat a "OPEN EXTEND" znamená sekvenční prodlužování již existujícího souboru dat. Protože oba dva způsoby otevření jsou si velmi podobné budeme dále (až na případné výjimky) mluvit pouze o volbě "OUTPUT", čímž je třeba rozumět "OUTPUT nebo EXTEND". 3) Volby "WITH NO REWIND" a "REVERSED" jsou v MX Cobolu brány pouze jako poznámkové. Funkce: Příkaz OPEN způsobí otevření všech souborů, které jsou v něm uvedeny. Otevřením souboru se rozumí především: a) Vyhradí se paměťová oblast pro logickou větu souboru (01), tedy od okamžiku otevření souboru lze pracovat s 01 souboru a s jejími podřízenými položkami. b) Připraví a naplní se řídící struktura, s jejíž pomocí bude MX Cobol se souborem dat pracovat. Poznámka: Příkaz OPEN nečte, nezapisuje ani neopravuje žádnou logickou větu. Musí však být bezpodmínečně proveden jako první příkaz při zpracování jakéhokoliv souboru (s výjimkou souborů uvedených v klauzulích USING a GIVING v příkazech SORT a MERGE). Pravidla: 1) Týž soubor může být během výpočtu otevřen několikrát, a to i s různými volbami INPUT, OUTPUT, I-O. Před každým novým otevřením musí být však soubor vždy uzavřen příkazem CLOSE bez volby REEL/UNIT. 2) Způsob otevření souboru určuje typ souboru takto: a) Je-li soubor se sekvenčním přístupem otevřen OPEN OUTPUT, jedná se o prvotní vytváření souboru, je-li otevřen OPEN EXTEND, jedná se o prodlužování souboru dat. Je tedy přípustné provádět pouze příkazy WRITE pro zápis logických vět. b) Pro soubor se sekvenčním přístupem jsou otevření OPEN INPUT a OPEN I-O zcela rovnocenná a znamenají čtení a případně též opravování již existujícího souboru dat. Je přípustné provádět příkazy READ pro čtení a u diskového nebo disketového souboru též příkazy REWRITE pro opravu logických vět (oprava je přípustná i při otevření OPEN INPUT!). U sekvenčního diskového nebo disketového souboru lze provádět též příkaz WRITE, který zde však neznamená zápis nové logické věty, nýbrž opravu již existující logické věty (stejně jako příkaz REWRITE). U indexového souboru lze navíc provádět příkazy START a DELETE. c) Pro soubor s ACCESS RANDOM nebo s ACCESS DYNAMIC jsou všechny tři způsoby otevření zcela rovnocenné a po kterémkoliv z nich lze provádět všechny příkazy READ, WRITE a REWRITE (u indexového souboru též DELETE a u indexového souboru s ACCESS DYNAMIC též START). 3) Jedná-li se o soubor určený pro výstup na tiskárnu, nesmí být tento soubor otevírán OPEN INPUT ani OPEN I-O. 4) Volby "WITH NO REWIND" a "REVERSED" jsou v MX Cobolu chápány jako poznámky. To znamená, že je přípustné je uvést, ale jejich uvedení je rovnocenné jejich neuvedení, nemají žádný vliv na vlastnosti programu. 5) Pro každý soubor deklarovaný klauzulí SELECT a popsaný klauzulí FD musí být v programu uveden alespoň jeden příkaz OPEN(výjimku tvoří soubory uvedené v příkazech SORT a MERGE, kde uvedení v klauzuli USING znamená implicitní otevření OPEN INPUT a uvedení v klauzuli GIVING znamená implicitní otevření OPEN OUTPUT), aby byly takto překladači dodány nezbytné informace o typu souboru. Příklad: OPEN INPUT DVERE KONZERVA OUTPUT HUBA OPEN OUTPUT N-STAV I-O ST-STAV INPUT ZMENY