4.4.6. Klauzule REPORT Formát: { REPORT IS | REPORTS ARE } jméno-sestavy ... Zápisy "REPORT", "REPORT IS", "REPORTS" a "REPORTS ARE" jsou ekvivalentní. Jména sestav smí být uvedena v libovolném pořadí. Funkce: Klauzule je přípustná jen u sekvenčního souboru. Uvádí se v ní jedno nebo několik jmen sestav, definovaných klauzulemi RD v REPORT SECTION (viz 13.4.). Klauzule REPORT resp. REPORTS určuje, že logické věty uvedených sestav budou Generátorem sestav zapisovány na vnější médium prostřednictvím tohoto sekvenčního souboru. Pravidlo: Má-li soubor v FD klauzuli REPORT/REPORTS, nemusí (i když mohou) za FD následovat popisy logických vět 01. Překladač pro soubor totiž vytvoří umělou 01, která bude považována za první 01 tohoto souboru. Je-li v FD uvedena klauzule RECORD, bude délka této umělé 01 rovna celému-číslu-2 z této klauzule RECORD. Není-li v FD uvedena klauzule RECORD, pak popsal-li uživatel pro tento soubor nějakou 01, bude délka umělé 01 rovna maximální délce ode všech těchto explicitně popsaných 01, zatímco nepopsal-li uživatel pro tento soubor žádnou 01, bude délka umělé 01 rovna 133 bytů. Tato umělá 01 se započítává do kontrol a výpočtů popsaných v 4.4.3. Je určena pro Generátor sestav a její jméno je pro uživatele nepřístupné. Poznámka: Nebývá sice obvyklé, aby uživatel pracoval se souborem sloužícím pro Generátor sestav také sám pomocí příkazů WRITE, READ, REWRITE, MATCH, SORT a MERGE, nicméně smí tak činit, a to jak před INITIATE, tak během činnosti Generátoru sestav, tak i po TERMINATE. V takovém případě smí uživatel pro tento soubor popsat i další 01, které bude používat sám ve svých příkazech WRITE resp. REWRITE a v dalších příkazech pro zpracování logických vět (MOVE apod.); i pak se ovšem Generátor sestav odvolává pouze na výše zmíněnou umělou 01. V příkazech WRITE by měl uživatel respektovat skutečnost, že Generátor sestav provádí příkazy WRITE s volbou AFTER. Příklady klauzulí FD: FD DALIMIL. FD KOSMAS RECORDING V. FD ADOLF RECORDING MODE IS F RECORDS CONTAINS 80 CHARACTERS VALUE OF FILE-ID IS RUDOLF OF HESS LINAGE IS WILHELM LINES WITH FOOTING AT ALFRED LINES AT TOP ERICH LINES AT BOTTOM KARL REPORTS ARE HERMANN HEINRICH JOSEPH MARTIN. FD GABRIEL RECORDING V RECORD 40 TO 60 VALUE OF FILE-ID 'michael.arch' LINAGE 60 FOOTING 55 TOP 4 BOTTOM 8. 4.4.7. Použití pracovní oblasti Pro uživatele může být někdy důležité, zda 01 určitého souboru má během zpracování tohoto souboru konstantní adresu anebo zda se adresa 01 během zpracování souboru mění, a dále, zda má 01 souboru přidělenou adresu (a zda je tedy přípustné s ní a s jejími podřízenými položkami pracovat) hned po provedení příkazu OPEN anebo až po provedení prvního příkazu READ, zda má 01 přidělenou adresu mezi dosažením konce souboru (AT END) a provedením příkazu CLOSE resp. po vzniku jiného mimořádného stavu atd. Základní pravidlo zní, že u žádného souboru nemá 01 přidělenu adresu před provedením příkazu OPEN ani po provedení příkazu CLOSE; v tuto dobu je ukazatel na začátek 01 tohoto souboru vynulován, takže jakýkoliv pokus přesunout něco do 01 nebo do některé její podřízené položky způsobí havárii. V tomto COBOLu se u všech souborů při otevírání souboru příkazem OPEN vyhradí pracovní paměťová oblast o délce RECSIZE (při RECORDING V nebo U včetně dvou bytů pro délku), která zůstává vyhrazena na témže místě během celého zpracování souboru až do jeho uzavření příkazem CLOSE, jenž ji opět zruší. 01 souboru bude po celou dobu zpracování souboru umístěna v této pracovní oblasti, tedy na pevném místě. I u vstupního sekvenčního souboru lze tedy pracovat s 01 souboru mezi otevřením (OPEN) a prvním čtením (READ), jakož i mezi dosažením konce souboru (AT END) a uzavřením (CLOSE), a to i v případě, že soubor nemá ani jednu logickou větu. U výstupního souboru zůstává i po provedení příkazu WRITE právě zapsaná logická věta přístupná uživateli i nadále v 01, takže uživatel může využít některé části předešlé logické věty při vytváření následující logické věty. Doporučujeme však těchto možností raději nevyužívat, neboť zdrojový program pak může být nepřenositelný do jiných implementací jazyka COBOL. U třídicích souborů má 01 popsaná za SD přidělenu paměť pouze během činnosti příkazu SORT resp. MERGE, a to pouze v těch chvílích, kdy třídicí systém od uživatele větu žádá (tj. ve vstupní rutině) nebo kdy uživateli větu předává (tj. ve výstupní rutině po provedení prvního příkazu RETURN a před uplatněním klauzule AT END v příkazu RETURN). Uživatel tedy nesmí s 01 popsanou za SD pracovat ve výstupní rutině před provedením prvního příkazu RETURN a neměl by s ní pracovat ani mezi uplatněním klauzule AT END a dokončením činnosti výstupní rutiny (práce s 01 po AT END je většinou přípustná, existují však výjimky, kdy dojde k havárii). Navíc 01 popsaná za SD mění během třídění (jak při vstupu, tak při výstupu) svou adresu; každý příkaz RELEASE resp. RETURN ji obecně změní. Při vstupu tedy po provedení příkazu RELEASE již 01 nebude obsahovat právě zapsanou logickou větu (neboť tato logická věta zůstala na původním místě, zatímco 01 změnila svou adresu), takže uživatel nemůže využívat částí právě odeslané logické věty při vytváření následující logické věty. V takovém případě je výhodné používat příkazy RELEASE s klauzulí FROM a logické věty vytvářet v položce uvedené za slovem FROM, jejíž adresa se nemění. 4.5. Popis položky Formát: číslo-úrovně { jméno-položky | FILLER } [ REDEFINES [jméno-položky] ] [ {PICTURE|PIC} IS vzor ] [ BLANK WHEN ZERO ] [ [SIGN IS] { LEADING | TRAILING } [SEPARATE CHARACTER] ] [ [USAGE IS] { DISPLAY | COMP | COMPUTATIONAL | COMP-1 | COMPUTATIONAL-1 | COMP-2 | COMPUTATIONAL-2 | COMP-3 | COMPUTATIONAL-3 | INDEX } ] [ {JUSTIFIED|JUST} RIGHT ] [ {SYNCHRONIZED|SYNC} {LEFT|RIGHT} ] [ VALUE IS { literál | figur.konstanta | ALL-klauzule } ] [ OCCURS [celé-číslo-1 TO] celé-číslo-2 TIMES [ DEPENDING ON celočíselná-položka ] [ {ASCENDING|DESCENDING} KEY IS jmeno-položky... ]... [ INDEXED BY jméno-speciálního-indexu... ] ] [ ENTRY ] [ EXTRN ]. Tento formát se používá pro popis položek s čísly úrovně 01 až 49 nebo 77 ve FILE SECTION, WORKING-STORAGE SECTION, LINKAGE SECTION a v COMMUNICATION SECTION. Jiné formáty platí pro položky s čísly úrovně 66 (viz 4.7.), pro podmínková jména s čísly úrovně 88 (viz 4.6.) a pro položky z REPORT SECTION (viz 13.5.). Popis položky musí začínat číslem úrovně následovaným jménem položky nebo slovem FILLER nebo přímo některou z klauzulí. Klauzule REDEFINES, PICTURE/PIC, BLANK, SIGN, USAGE, JUSTIFIED/JUST, SYNCHRONIZED/SYNC, VALUE, OCCURS, ENTRY a EXTRN mohou být uvedeny v libovolném vzájemném pořadí. Položky dělíme na skupinové a elementární (viz 4.1.). Dle přítomnosti a tvaru klauzulí PICTURE, BLANK, SIGN, USAGE a VALUE rozdělujeme elementární položky do těchto čtyř typů: 1) Alfanumerické položky, které mají v popisu klauzuli PICTURE, jejíž vzor obsahuje pouze znaky X,A,9, přičemž obsahuje alespoň jedno X nebo A. (Za alfanumerickou je považována též elementární položka bez klauzule PICTURE, která má uvedenu klauzuli VALUE s alfanumerickým literálem bez ALL, přičemž klauzule USAGE je vynechána anebo je uvedena s volbou DISPLAY. Předpokládá se pak implicitní klauzule PICTURE se vzorem obsahujícím tolik znaků X, kolik znaků má alfanumerický literál uvedený v klauzuli VALUE. Klauzule JUSTIFIED/JUST není v tomto případě přípustná.) Klauzule BLANK a SIGN jsou u alfanumerické položky zakázány, klauzule USAGE musí být vynechána anebo uvedena s volbou DISPLAY. 2) Alfanumerické editované položky, které mají v popisu klauzuli PICTURE, jejíž vzor obsahuje pouze znaky X,A,9,B,0,/ a dvojznaky Yx, přičemž obsahuje alespoň jedno X nebo A a alespoň jedno B nebo 0 nebo / nebo Yx. Klauzule BLANK a SIGN jsou u alfanumerické editované položky zakázány, klauzule USAGE musí být vynechána anebo uvedena s volbou DISPLAY. 3) Numerické položky, což jsou elementární položky patřící k některému z těchto čtyř typů: a) Numerické položky s pevnou řádovou tečkou, které mají v popisu klauzuli PICTURE, přičemž vzor obsahuje pouze znaky 9,S,V,P v přípustné kombinaci (viz 4.5.3.C1) a není uvedena ani klauzule BLANK ani klauzule SIGN formátu 1 nebo 3. U numerické položky s pevnou řádovou tečkou musí být klauzule USAGE buďto vynechána anebo uvedena s volbou DISPLAY nebo COMP resp. COMPUTATIONAL nebo COMP-3 resp. COMPUTATIONAL-3. Podle tvaru klauzule USAGE rozdělujeme numerické položky s pevnou řádovou tečkou dále na - rozpakované položky (při USAGE DISPLAY resp. při vynechané klauzuli USAGE), - binární položky (při USAGE COMP nebo COMPUTATIONAL), - pakované položky (při USAGE COMP-3 nebo COMPUTATIONAL-3). b) Exponenciální binární položky, které dále rozdělujeme na exponenciální krátké položky (při USAGE COMP-1 nebo COMPUTATIONAL-1) a exponenciální dlouhé položky (při USAGE COMP-2 nebo COMPUTATIONAL-2). U obou těchto typů jsou klauzule PICTURE, BLANK a SIGN zakázány. c) Exponenciální znakové položky, které mají v popisu klauzuli PICTURE, jejíž vzor obsahuje znak E a další znaky v přípustné kombinaci (viz 4.5.3.C2). Klauzule BLANK a SIGN jsou u exponenciální znakové položky zakázány, klauzule USAGE musí být vynechána anebo uvedena s volbou DISPLAY. d) Numerické editované položky, které mají v popisu klauzuli PICTURE, přičemž nastává jedna z těchto tří možností: - Vzor obsahuje pouze znaky 9,V,P,Z,*,+,-,B,0,/, čárka, tečka a měnový symbol a dvojznaky CR, DB a Yx v přípustné kombinaci (viz 4.5.3.C3), přičemž se však vzor neskládá pouze ze znaků 9,V,P (pak by se totiž jednalo o numerickou položku s pevnou řádovou tečkou). Klauzule BLANK může a nemusí být uvedena, klauzule SIGN uvedena být nesmí. - Vzor obsahuje pouze znaky 9,V,P v přípustné kombinaci (viz 4.5.3.C1), přičemž popis položky obsahuje navíc klauzuli BLANK. Klauzule SIGN uvedena být nesmí. - Vzor obsahuje povinně znak S a dále pouze znaky 9,V,P v přípustné kombinaci (viz 4.5.3.C1), přičemž popis položky obsahuje navíc klauzuli SIGN formátu 1 nebo 3. Klauzule BLANK může a nemusí být uvedena. V kterémkoliv z těchto tří případů musí být klauzule USAGE vynechána anebo uvedena s volbou DISPLAY. 4) Položky s klauzulí USAGE INDEX (označované zkráceně jako UI-položky) mají v popisu klauzuli USAGE INDEX. Klauzule PICTURE, BLANK a SIGN jsou u nich zakázány. Popis položky, který neodpovídá žádnému z výše uvedených typů, je nepřípustný. Následující tabulka uvádí pro jednotlivé typy položek, které z klauzulí je přípustné v jejich popisu uvést: ----------------------------------------------------------- | | R | | | E | | | D P | | | E I O | | typ položky | F C B U V C E | | | I T L S S J S A C X | | | N U A I A U Y L U T | | | E R N G G S N U R R | | | S E K N E T C E S N | |--------------------------|------------------------------| | skupinová | x - - T T - T x x x | | alfanumerická | x x - - P x P x x x | | - s klauzulí PICTURE | x + - - P x P x x x | | - bez klauzule PICTURE| x - - - P - P + x x | | alfanumerická editovaná | x + - - P - P x x x | | numerická s pevnou tečkou| x + - P P - P x x x | | - rozpakovaná | x + - P P - P x x x | | - binární | x + - - + - x x x x | | - pakovaná | x + - - + - P x x x | | exponenciální dlouhá | x - - - + - x x x x | | exponenciální krátká | x - - - + - x x x x | | exponenciální znaková | x + - - P - P x x x | | numerická editovaná | x + x x P - P x x x | | - nejen S,9,V,P | x + x - P - P x x x | | - jen 9,P,V + BLANK | x + + - P - P x x x | | - jen S,9,P,V + SIGN | x + x + P - P x x x | | položka s USAGE INDEX | x - - - + - x - x x | ----------------------------------------------------------- + ... klauzule je povinná - ... klauzule je zakázaná x ... klauzule je nepovinná, při uvedení se využívá P ... klauzule je nepovinná, při použití slouží jen jako poznámka (při SIGN: lze uvést jedině formát 2, tj. SIGN s TRAILING bez SEPARATE; při USAGE: lze uvést jedině USAGE DISPLAY) T ... klauzule SIGN, USAGE resp. SYNC neplatí pro tuto skupinovou položku samu, nýbrž se přenáší pro všechny její podřízené elementární položky, pro něž má smysl a které nemají vlastní stejnojmennou klauzuli 4.5.1. Číslo úrovně a jméno položky Formát: číslo-úrovně { jméno-položky | FILLER } Číslo-úrovně musí být celé číslo bez znaménka obsahující nejvýše dvě číslice. Musí být v rozmezí 01 až 49 anebo to smí být 77; dále se v COBOLu pro speciální účely používají čísla úrovně 66 (viz 4.7.) a 88 (viz 4.6.). U čísel úrovně menších než 10 je ekvivalentní zapsat je pomocí dvou číslic anebo pomocí jedné číslice (např. 02 anebo 2). Jméno-položky může programátor zvolit libovolně ve shodě s pravidly uvedenými v 1.4. Použije-li programátor místo jména položky reservované slovo FILLER, nemůže se pak na tuto položku nikde ve zdrojovém programu odvolávat jménem. Přesně stejný význam by ovšem mělo, kdyby uživatel místo slova FILLER uvedl jakékoliv jiné jméno, které by pak ve zdrojovém programu nikde nepoužil; uvedení slova FILLER pouze zvyšuje přehlednost zdrojového programu, neboť na první pohled ukazuje, která položka není a ani nemůže být nikde ve zdrojovém programu odkazována jménem. V popisu se jménem FILLER mohou být uvedeny všechny klauzule přesně stejně jako v popisu pojmenované položky; mimo jiné lze tedy přidělit FILLERu počáteční obsah pomocí klauzule VALUE (přičemž při neuvedení klauzule VALUE je počáteční obsah FILLERu nedefinován stejně jako v případě pojmenované položky). Obsah položky se jménem FILLER smí uživatel naplňovat, využívat i testovat, musí se přitom ovšem odvolávat na jméno skupinové položky nadřízené FILLERu nebo na jméno položky tento FILLER redefinující apod. Jméno FILLER se používá především pro ty části logických vět (01), s nimiž se v programu nepracuje, při redefinici a dále též pro řešení problémů plynoucích ze zákazů a omezení týkajících se klauzule OCCURS (spolu s VALUE nebo u 01 apod.). Tento COBOL povoluje slovo FILLER vynechat; za číslem úrovně může tedy stát tečka nebo první klauzule z popisu této položky. Příklad: 01. (předpokládá se FILLER) 02 OCCURS 25. (předpokládá se FILLER) 03 ALFA PIC 999. 03 PIC X(7). (předpokládá se FILLER) 4.5.2. Klauzule REDEFINES Formát: číslo-úrovně { jméno-položky-1 | FILLER } : : REDEFINES [jméno-položky-2] Funkce: Klauzule REDEFINES umožňuje několikanásobný popis téhož úseku paměti. Položce-1 (v jejímž popisu je klauzule REDEFINES uvedena) a jejím případným podřízeným položkám bude přidělen nikoliv nový úsek paměti, nýbrž ten úsek paměti, který již byl jednou přidělen položce-2 (uvedené za REDEFINES) a jejím případným podřízeným položkám. Příklad: 01 STITEK. 02 CS PIC 999. 02 DS1. 03 CISZAM PIC 9(6). 03 JMZAM PIC X(12). 02 DS2 REDEFINES DS1. 03 CISMAT PIC 9(4). 03 CENAMAT PIC 9(6). 03 FILLER PIC X(3). 03 KUSY PIC 9(5). 02 DALSI PIC X(6). |------------------------STITEK-----------------------| | |----------------DS1----------------| | |-CS--|---CISZAM--|---------JMZAM---------|---DALSI---| ------|-------|-----------|-----|---------|------------ |-CISMAT|--CENAMAT--|FILL.|--KUSY---| |----------------DS2----------------| Úsek paměti přidělený položce DS1 a jejím podřízeným položkám CISZAM a JMZAM se znovu přidělil položce DS2 a jejím podřízeným položkám CISMAT, CENAMAT, FILLER a KUSY. Položky DS1 a DS2 mají tedy přidělen týž úsek paměti. Uživatel musí vědět, zda tento společný úsek paměti má pro tuto chvíli sloužit pro údaje o zaměstnanci (pracuje se pak s položkami DS1, CISZAM a JMZAM) nebo pro údaje o materiálu (pracuje se pak s položkami DS2, CISMAT, CENAMAT a KUSY). Jsou-li z dřívějška naplněny položky CISZAM a JMZAM a pošle-li uživatel nějakou hodnotu do položky CENAMAT, přemaže tím poslední 2 byty položky CISZAM a první 4 byty položky JMZAM; první 4 byty položky CISZAM a posledních 8 bytů položky JMZAM však zůstává zatím nezměněno. Pravidla: 1) Jméno-položky-2 se zapisuje bez kvalifikace a bez indexů, i kdyby snad při jiném použití položky-2 byly nezbytné. Kvalifikace sice může být uvedena, nicméně překladač její správnost nekontroluje a hlásí upozornění. 2) Položka-1 resp. FILLER (s klauzulí REDEFINES) a položka-2 (uvedená v klauzuli REDEFINES) buďto musí mít obě totéž číslo úrovně 01 resp. 77 anebo musí být obě podřízeny bez mezistupně (bezprostředně) téže skupinové položce. (Dodržuje-li uživatel zásadu (jak tomu v praxi bývá téměř vždy), že všechny položky podřízené k určité skupinové položce bez mezistupně mají stejné číslo úrovně, budou tedy položka-1 (resp. FILLER) a položka-2 vždy mít stejné číslo úrovně.) 3) Popis položky-1 resp. FILLERu musí následovat až za popisem položky-2. Přitom mezi popisem položky-2 a popisem položky-1 (resp. FILLERu) smí být uvedeny jen popisy položek a podmínkových jmen podřízených k položce-2 a dále popisy položek, které též redefinují položku-2 a popisy jejich podřízených položek a podmínkových jmen. Toto pravidlo lze formulovat též takto: Redefinující úsek paměti (odpovídající položce-1 resp. FILLERu) musí být popsán bezprostředně za redefinovaným úsekem paměti (odpovídajícím položce-2). Poznámka: Z bodů 2 a 3 vyplývá, že klauzule REDEFINES nesmí být uvedena u položky s číslem úrovně 01 stojící na začátku sekce nebo za položkou s číslem úrovně 77, dále u položky s číslem úrovně 77 stojící na začátku sekce nebo za poslední položkou ze struktury 01, a konečně u položky s číslem úrovně 02 až 49 popsané bezprostředně za popisem její nejbližší nadřízené položky. Dále je klauzule REDEFINES zakázaná v popisech s čísly úrovně 66 a 88. U všech ostatních položek je však klauzule REDEFINES přípustná. 4) Lze provést též vícenásobnou redefinici téhož úseku paměti. V tom případě za popisem redefinovaného úseku paměti následují (v jakémkoliv pořadí) popisy všech redefinujících úseků paměti. U každé z těchto redefinujících položek lze v klauzuli REDEFINES uvést buďto jméno původní redefinované položky nebo jméno kterékoliv z předcházejících redefinujících položek (anebo uvést klauzuli REDEFINES beze jména, viz dále). Příklad: 03 A PIC XXX. 03 B REDEFINES A PIC 999. (lze uvést jen A) 03 C REDEFINES A. (lze uvést A nebo B) 04 C1 PIC 9. 04 C2 PIC 99. 03 D REDEFINES B PIC ZZZ. (lze uvést A,B,C) 03 E REDEFINES D PIC --9. (lze uvést A,B,C,D) 5) Je-li u kterékoliv položky klauzule REDEFINES vůbec povolena, pak - jak vyplývá z bodů 2 a 3 - existuje právě jedna položka-2, jejíž jméno smí být v klauzuli REDEFINES uvedeno: nejbližší předcházející položka s týmž číslem úrovně (při vícenásobné redefinici je sice těchto položek-2 více, je však téměř vždy lhostejné, kterou z nich v klauzuli REDEFINES uvedeme). Proto tento COBOL povoluje vynechat v klauzuli REDEFINES jméno-položky-2 a automaticky vyhledá to jedinou položku-2, která smí být nyní redefinována (samozřejmě pokud takováto položka-2 vůbec existuje). Příklad: 01 ALFA. (nesmí REDEFINES) 02 BETA PIC 999. (nesmí REDEFINES) 02 GAMA REDEFINES PIC XXX. (doplní se BETA) 01 DELTA REDEFINES. (doplní se ALFA) 02 ETA PIC 99. (nesmí REDEFINES) 02 FILLER REDEFINES. (doplní se ETA) 03 E1 PIC 9. (nesmí REDEFINES) 03 E2 REDEFINES PIC X. (doplní se E1) 03 FILLER PIC X. 02 THETA REDEFINES PIC ZZ. (doplní se ETA) 01 JOTA REDEFINES PIC X(12). (doplní se ALFA) 6) V popisu položky-1 jakož i v popisu položky-2 smí být uvedena klauzule OCCURS; v tom případě je redefinujícím resp. redefinovaným úsekem paměti celé jednorozměrné pole tvořené všemi opakováními položky-1 resp. položky-2. 7) Mají-li položka-1 a položka-2 číslo úrovně 01 nebo 77, smí být položka-1 (tj. redefinující úsek) kratší, stejně dlouhý anebo i delší než položka-2 (tj. redefinovaný úsek); přitom kterákoliv z nich smí mít i proměnnou délku (tj. smí mít podřízené položky s klauzulí OCCURS DEPENDING). Přidělený úsek paměti bude mít délku rovnou maximu z obou délek (položka-1 i položka-2 v něm budou začínat od jeho prvního bytu), takže příští položka s číslem úrovně 01 nebo 77 dostane přidělenou adresu až za delší z obou těchto položek. 8) Mají-li položka-1 a položka-2 číslo úrovně 02 až 49, smí být redefinující úsek (tj. položka-1 včetně případné klauzule OCCURS) kratší nebo stejně dlouhý jako redefinovaný úsek (tj. položka-2 včetně případné klauzule OCCURS, v případě vícenásobné redefinice zde míníme první redefinovanou položku), nesmí však být delší. Přitom oba tyto úseky musí mít pevné délky, tj. ani u položky-1, ani u položky-2, ani u žádné položky k některé z nich podřízené nesmí být uvedena klauzule OCCURS DEPENDING. Příklad: 01 A. (pevná délka=115) 02 B PIC X(5) OCCURS 20. (délka=100) 02 C REDEFINES B PIC 9 OCCURS 60. (délka=60) 02 D REDEFINES C PIC X(80). (délka=80) 02 H PIC X(15). (délka=15) 01 E REDEFINES A. (proměnná délka<=240) 02 F PIC 999 OCCURS 80 DEPENDING I. 01 G PIC X. Položky A a E začínají na téže adrese, položka G bude začínat až 240 bytů od společného začátku položek A a E. Položka A je tedy totožná s prvními 115 byty položky E. Podobně položky B(1), C(1) a D začínají na téže adrese jako A (a tedy i jako E a jako F(1)). Položka H začíná až 100 bytů od začátku položky A, tzn. až za koncem položky B. Příklad: 77 I PIC 999. 77 J REDEFINES I PIC X(10). 77 K REDEFINES I PIC X(1000). 77 L PIC X. (začíná 1000 bytů od začátku I) 9) Položky podřízené k položce-1 nebo k položce-2 smí mít v popisu další klauzuli REDEFINES (viz i příklady výše). Příklad: 01 A. 02 B PIC 9(5) OCCURS 10. 02 C REDEFINES B OCCURS 50. 03 D PIC X. 03 E PIC 9 REDEFINES D. 10) Ve FILE SECTION a v COMMUNICATION SECTION se klauzule REDEFINES uvedená u položky s číslem úrovně 01 vždy ignoruje. Položky s číslem úrovně 01 patřící k témuž FD, SD resp. CD mají vždy implicitně přijatou klauzuli REDEFINES nezávisle na tom, zda klauzule REDEFINES u nich je nebo není uvedena explicitně. Naproti tomu ve WORKING-STORAGE SECTION a v LINKAGE SECTION je klauzule REDEFINES významná i u položek s čísly úrovně 01 a 77. Příklad: Je-li hodnota rozpakované položky POCET dělitelná pěti, máme odskočit na proceduru PETKA. Položku POCET si redefinujeme tak, abychom měli pojmenovaný její poslední byte; pak se zeptáme, zda je na něm 0 nebo 5: 02 POCET PIC 9(5). 02 REDEFINES. 03 PIC X(4). 03 POSLEDNI PIC X. : IF POSLEDNI = 0 OR 5 GO TO PETKA.