4.5.6. Klauzule JUSTIFIED Formát: { JUSTIFIED | JUST } RIGHT Pravidla: 1) Slova JUSTIFIED a JUST jsou ekvivalentní, volitelné slovo RIGHT je bezvýznamné. 2) Klauzule JUST smí být uvedena pouze v popisu alfanumerické nebo alfanumerické editované položky. 3) Přítomnost klauzule JUST v popisu příjmové položky se projeví při dosazování počáteční hodnoty položky pomocí klauzule VALUE (viz 4.5.8; nikoliv však u klauzule VALUE pro podmínková jména), při provádění příkazu MOVE (viz 6.1.), při přesunech prováděných dle pravidel příkazu MOVE (příkaz INITIALIZE, klauzule FROM v příkazech WRITE, REWRITE a RELEASE, klauzule INTO v příkazech READ a RETURN, klauzule VALUE v REPORT SECTION atd.) a při provádění příkazu UNSTRING (viz 6.3.). 4) Při uvedení klauzule JUST v popisu příjmové položky bude jakýkoliv vysílající údaj (kromě skupinové položky) ukládán do této příjmové položky odprava, takže poslední byte vysílajícího údaje přijde na poslední byte příjmové položky. Z toho vyplývá, že klauzule JUST se uplatní pouze tehdy, má-li vysílající údaj jinou délku než příjmová položka; při stejných délkách bude klauzule JUST neúčinná. 4.5.7. Klauzule SYNCHRONIZED Formát: { SYNCHRONIZED | SYNC } { LEFT | RIGHT } Pravidla: 1) Slova SYNCHRONIZED a SYNC jsou ekvivalentní, volitelná slova LEFT a RIGHT jsou bezvýznamná. 2) Je-li klauzule SYNC uvedena u elementární položky, platí pouze pro ni. Je-li uvedena u skupinové položky, platí pak pro každou její podřízenou elementární položku. 3) Klauzule SYNC u některých typů položek způsobí, že jim přidělený úsek paměti nebude začínat bezprostředně za úsekem paměti přiděleným předcházející elementární položce, ale bude začínat až na nejblíže vyšší adrese dělitelné dvěma, čtyřmi resp. osmi: a) U binární položky (USAGE COMP) bude adresa úseku dělitelná dvěma (při 1-4 znacích 9 v PICTURE) resp. čtyřmi (při 5-18 znacích 9 v PICTURE). b) U exponenciální krátké položky (USAGE COMP-1) bude adresa úseku dělitelná čtyřmi. c) U exponenciální dlouhé položky (USAGE COMP-2) bude adresa úseku dělitelná osmi. d) U položky s USAGE INDEX bude adresa úseku dělitelná čtyřmi. Ve FILE SECTION a v LINKAGE SECTION, kde se skutečná adresa položky přiděluje dynamicky až během výpočtu, je třeba ve výše uvedeném výčtu místo "adresa úseku" číst "rozdíl adresy úseku od začátku příslušné 01". U všech ostatních typů položek je klauzule SYNC neúčinná a považuje se jen za poznámku. 4) Uvedení klauzule SYNC může způsobit určité zrychlení práce s položkou (obzvláště když by položka jinak začínala na liché adrese). Před úsekem paměti přiděleným položce však mohou vzniknout tzv. výplňkové byty (viz 4.10.). 5) Je-li zadán parametr CBL ALIGN, má to stejný účinek, jako kdyby u všech položek byla uvedena klauzule SYNC. 4.5.8. Klauzule VALUE Formát: VALUE IS { literál | fig.konstanta | ALL-klauzule } Tento formát se používá u položek s čísly úrovně 01 až 49 nebo 77. U podmínkových jmen (s čísly úrovně 88) se používá rozšířený formát, který je popsán v 4.6. Funkce: U položek z FILE SECTION a z LINKAGE SECTION se klauzule VALUE považuje jen za poznámku a je neúčinná (tyto položky totiž nemají na začátku výpočtu ještě přidělen úsek paměti). U položek z WORKING-STORAGE SECTION a z COMMUNICATION SECTION klauzule VALUE určuje počáteční hodnotu položky, tj. obsah, který bude mít úsek paměti přidělený položce na začátku výpočtu. U skupinových, alfanumerických a u téměř všech typů numerických položek je tato počáteční hodnota stejná, jaká by vznikla použitím příkazu MOVE, jenž by přesunul údaj uvedený v klauzuli VALUE do položky. Výjimku tvoří pouze - alfanumerické editované položky, - exponenciální znakové položky, pokud je v klauzuli VALUE alfanumerický literál nebo ALL-klauzule nebo figurativní konstanta jiná než ZERO (ZEROS, ZEROES), - numerické editované položky, které nemají klauzuli SIGN, u nichž u všech se počáteční hodnota položky dosazuje alfanumericky přesně stejně, jako kdyby se jednalo o alfanumerickou položku o téže délce - neprovádějí se tedy žádné ediční úpravy. Je proto vhodné používat v klauzuli VALUE alfanumerický literál o stejné délce, jakou má položka (případně figurativní konstantu nebo ALL-klauzuli). Další výjimku tvoří položky s klauzulí USAGE INDEX, u nichž se počáteční hodnota dosazuje tak, jako kdyby na jejich místě stála položka s PIC S9(9) USAGE COMP. Pravidla: 1) Klauzule VALUE nesmí být uvedena v těchto případech: a) Pro skupinovou položku s proměnnou délkou (tj. mající alespoň jednu podřízenou položku s klauzulí OCCURS DEPENDING). b) Pro položku, která má v popisu klauzuli OCCURS anebo je podřízena položce s klauzulí OCCURS. c) Pro položku, která je popsána ve struktuře za položkou s klauzulí OCCURS DEPENDING (má "proměnnou adresu"). d) Pro položku s číslem úrovně 66. e) Pro položku, která má větší délku než 131072 bytů. (Už i u položek o několika stech nebo tisících bytů je klauzule VALUE nevhodná a měla by být nahrazena příkazem MOVE za účelem šetření kapacity disku a zrychlení spojování.) 2) U numerických položek (s výjimkou exponenciálních znakových položek a těch numerických editovaných položek, které nemají klauzuli SIGN) a dále též u položek s USAGE INDEX smí být v klauzuli VALUE uveden pouze numerický literál, figurativní konstanta ZERO (ZEROS, ZEROES) nebo alfanumerický literál obsahující pouze cifry (smí mít ALL). U všech ostatních typů položek smí být údaj uvedený v klauzuli VALUE zcela libovolný. Poznámky: 1) Nemá-li určitá položka (ani žádná položka k ní nadřízená ani žádná položka s ní spojená pomocí klauzule REDEFINES) uvedenu v popisu klauzuli VALUE, je její počáteční hodnota nedefinována. (Přesně vzato bude vyplněna binárními nulami; tuto vlastnost je však vhodné považovat za počítačově závislou a v programech nevyužívat.) 2) Počáteční hodnotu položky určenou pomocí klauzule VALUE lze samozřejmě v průběhu výpočtu libovolně měnit. 3) Položka podřízená položce s klauzulí VALUE smí mít sama též uvedenu klauzuli VALUE - obsah příslušného úseku paměti je pak určen pomocí poslední ze všech klauzulí VALUE, které se k němu vztahují. Totéž platí i v případě, že je klauzule VALUE uvedena u položky s klauzulí REDEFINES nebo u položky podřízené položce s klauzulí REDEFINES, pokud redefinovaná položka anebo některá položka k ní podřízená má též uvedenu klauzuli VALUE. Příklad: 05 A PIC X(6) VALUE 'ABCD'. 05 B PIC X0XBX/X VALUE ALL 'T'. 05 C PIC S99V9 VALUE 6. 05 D PIC 9 COMP-3 VALUE -15.64. 05 E COMP-2 VALUE 10. 05 F PIC +9.999E+99 VALUE '+1.200E-02'. 05 G PIC ZZZ,ZZ9.99+ VALUE ' 1,234.00+'. 05 H PIC +9E+99 VALUE 5. 05 I PIC 999999 BLANK ZERO VALUE 5. 05 J PIC ZZZZZ9 VALUE 5. Položka A bude mít počáteční obsah ABCDbb, položka B TTTTTTT (při VALUE se neprovádí edice!), položka C 060 (hex. 303630), položka D hexadecimálně 53 (a hlásí se upozornění, že literál přesahuje PICTURE), položka E číslo 10 převedené do tvaru "double", položka F +1.200E-02 (bylo by však možno uvést i VALUE .012 s týmž účinkem), položka G bb1,234.00+ (u numerických editovaných položek není přípustné zadat hodnotu numericky, je nezbytný alfanumerický literál), položka H +5E+00 (bylo by možno uvést i VALUE '+5E+00'), položky I a J 5bbbbb (a u obou se hlásí upozornění, že se numerický literál dosazuje alfanumericky). Příklad: Položce, která má sama klauzuli OCCURS anebo je podřízena položce s klauzulí OCCURS, není přípustné přidělit počáteční hodnotu pomocí klauzule VALUE. Pokud se však nejedná o klauzuli OCCURS DEPENDING, je přípustné uvést vhodnou klauzuli VALUE u nadřízené skupinové položky a tím přece jen přidělit položkám pod OCCURSem počáteční hodnoty: 01 TAB1 VALUE SPACE. 02 K PIC X(1000) OCCURS 10. (hodnota = SPACE) 01 TAB2 VALUE ZERO. 02 L PIC S999V99 OCCURS 100. (hodnota = ZERO) 01 TAB3 VALUE LOW-VALUE. 02 M OCCURS 50. 03 N PIC S9(8) COMP. (hodnota = 0) 03 P COMP-2. (hodnota = 0) 01 TAB4 VALUE HIGH-VALUE. 02 Q PIC S9999 COMP OCCURS 20. (hodnota = -1) 01 TAB5 VALUE ALL 'ANO03E-.350E+01- 3.50$'. 02 R OCCURS 20. 03 S PIC XXX. (hodnota = ANO) 03 T PIC S99V9. (hodnota = -3.5) 03 U PIC +.999E+99. (hodnota = -3.5) 03 V PIC -ZZZ.99$. (hodnota = -3.5) 01 TAB6 VALUE ALL #000035040100DDFF#. 02 W OCCURS 40. 03 X PIC S9(4)V99 COMP-3. (hodnota = -3.5) 03 Y PIC S9999 COMP. (hodnota = 1) 03 Z PIC S999V9 COMP. (hodnota = -3.5) Některé z těchto "triků" jsou ovšem počítačově závislé: U položky P nutno ověřit, že skutečně 0 typu "double" znamená samé binární nuly. U položek Y a Z se předpokládá uložení hodnot typu "short" jako na počítačích PC. Poznámka: Kdybychom chtěli v předešlém příkladu přidělit počáteční hodnoty pouze položkám S a U, nikoliv však položkám T a V, nebylo by to možné zařídit pomocí klauzule VALUE u jejich nadřízené skupinové položky TAB5. Bylo by to však možné zařídit pomocí dvou příkazů INITIALIZE S BY 'ANO' INITIALIZE U BY -3.5 (viz 6.11.), provedených na začátku výpočtu. 4.5.9. Klauzule OCCURS Formát: OCCURS [celé-číslo-1 TO] celé-číslo-2 TIMES [ DEPENDING ON celočíselná-položka ] [ {ASCENDING|DESCENDING} KEY IS jméno-položky...] ... [ INDEXED BY jméno-speciálního-indexu... ] Funkce: Klauzule OCCURS se užívá k definici jednorozměrného pole. Způsobí, že položka mající v popisu klauzuli OCCURS se bude vyskytovat nikoliv v jediném exempláři, nýbrž že se bude v paměti opakovat několikrát za sebou s totožným formátem určeným ostatními klauzulemi z popisu položky. Pravidla: 1) Celé-číslo-2 musí být kladné a nejvýše rovné 2147483647. 2) Volba "celé-číslo-1 TO" je vždy nepovinná a považuje se pouze za poznámku. Pokud je uvedena, musí být celé-číslo-1 menší nebo rovno celému-číslu-2. 3) Není-li uvedena klauzule DEPENDING, je počet opakování položky v paměti pevný a je roven celému-číslu-2. 4) Klauzule OCCURS nesmí být uvedena v popisu položky s číslem úrovně 01 nebo 77. 5) Položka s klauzulí OCCURS ani žádná její podřízená položka nesmí mít v popisu klauzuli VALUE (viz však příklad v 4.5.8. umožňující tento zákaz obejít). 7) Klauzule OCCURS smí být uvedena jak u elementární, tak i u skupinové položky (v tomto případě se v paměti opakuje celá část struktury podřízená této skupinové položce). Příklad: 01 A. 02 B PIC 999 OCCURS 5. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |--------|--------|--------|--------|--------| |--B(1)--|--B(2)--|--B(3)--|--B(4)--|--B(5)--| |---------------------A----------------------| Příklad: 01 C. 02 D OCCURS 3. 03 E PIC XXX. 03 F PIC 99V9. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |--------|--------|--------|--------|--------|--------| |--E(1)--|--F(1)--|--E(2)--|--F(2)--|--E(3)--|--F(3)--| |-------D(1)------|-------D(2)------|-------D(3)------| |--------------------------C--------------------------| 8) Skupinová položka s klauzulí OCCURS smí mít mezi svými podřízenými položkami opět položku s klauzulí OCCURS. Pak tedy každý z prvků "vnějšího" jednorozměrného pole obsahuje další "vnitřní" jednorozměrné pole, čímž vlastně vzniká dvojrozměrné pole. Tímto způsobem lze do sebe vložit až 7 klauzulí OCCURS a popsat tak až sedmirozměrné pole. Příklad: 01 G. 02 H OCCURS 2. 03 I PIC 999 OCCURS 3. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |--------|--------|--------|--------|--------|--------| |-I(1 1)-|-I(1 2)-|-I(1 3)-|-I(2 1)-|-I(2 2)-|-I(2 3)-| |-----------H(1)-----------|-----------H(2)-----------| |--------------------------G--------------------------| Příklad: 01 J. 02 K OCCURS 2. 03 L PIC XXX. 03 M PIC 999 OCCURS 2. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |--------|--------|--------|--------|--------|--------| |--L(1)--|-M(1 1)-|-M(1 2)-|--L(2)--|-M(2 1)-|-M(2 2)-| |-----------K(1)-----------|-----------K(2)-----------| |--------------------------J--------------------------| 9) Má-li položka klauzuli OCCURS anebo je-li podřízena položce s klauzulí OCCURS, pak při každém použití této položky (s výjimkou použití v klauzuli REDEFINES, v podklauzuli ASCENDING/DESCENDING klauzule OCCURS a v příkazech SEARCH, INITIALIZE, CALL 'ICSORT', CALL 'ICSORTM' a CALL 'ICSORTP' je nutno u ní použít indexování (viz 4.3.). 10) Podklauzule DEPENDING, ASCENDING, DESCENDING a INDEXED smí být uvedeny v libovolném pořadí. 4.5.9.1. Klauzule DEPENDING Formát: DEPENDING ON celočíselná-položka Funkce: Uvedení klauzule DEPENDING způsobí, že počet opakování položky v paměti nebude pevný, nýbrž bude proměnný: v kterémkoliv okamžiku výpočtu bude určen hodnotou celočíselné numerické položky uvedené za slovem DEPENDING. Význam: Uvedení klauzule DEPENDING má tyto následky: 1) Skupinová položka, která má alespoň jednu podřízenou položku s klauzulí OCCURS DEPENDING, má proměnnou délku. Její délka tedy není konstantní, nýbrž při každém použití této položky musí být znovu vypočítávána, přičemž jako počet opakování každé její podřízené položky s klauzulí OCCURS DEPENDING se bere okamžitá hodnota položky uvedené za tímto DEPENDING. Je přípustné, aby takto vypočítaná délka položky byla rovna nule nebo byla větší, než jak odpovídá celým-číslům-2 z příslušných klauzulí OCCURS DEPENDING (i když takové překročení maximální délky dle popisů bývá většinou zaviněno chybou a způsobuje přemazání následujících úseků paměti). Pokud by však délka položky vyšla záporná, je další průběh výpočtu nedefinován. 2) Pokud je před určitou položkou v téže struktuře 01 popsána (nikoliv však jako její nadřízená) položka s klauzulí OCCURS DEPENDING, pak naše položka má proměnnou adresu. Tím míníme, že vzdálenost jejího prvního bytu od začátku její nadřízené 01 není konstantní, nýbrž proměnná. Při každém použití takové položky musí být její adresa (rovná adrese 01 zvětšené o tuto proměnnou vzdálenost) znovu vypočítávána, přičemž jako počet opakování každé předcházející položky s klauzulí OCCURS DEPENDING se bere okamžitá hodnota položky uvedené za tímto DEPENDING. Příklad: 01 A. 02 B PIC X(5). 02 C PIC 999 OCCURS 10 DEPENDING U. 02 D PIC X(7). 02 E OCCURS 20 DEPENDING V. 03 F PIC X(8). 03 G PIC 9(4) OCCURS 8. 02 H PIC X(6). 02 L. 03 M PIC 9(11) OCCURS 5 DEPENDING W. 01 N PIC X(100). položka rozdíl adresy od začátku A délka ------------------------------------------------------- A 0 18 + 3*U + 40*V + 11*W B 0 5 C(I) 5 + 3*(I-1) 3 D 5 + 3*U 7 E(J) 12 + 3*U + 40*(J-1) 40 F(J) 12 + 3*U + 40*(J-1) 8 G(J K) 20 + 3*U + 40*(J-1) + 4*(K-1) 4 H 12 + 3*U + 40*V 6 L 18 + 3*U + 40*V 11*W M(T) 18 + 3*U + 40*V + 11*(T-1) 11 N 903 100 Položka A má proměnnou délku, neboť dokonce tři její podřízené položky (C, E a M) mají klauzuli OCCURS DEPENDING. Rovněž položka L má proměnnou délku (a současně i proměnnou adresu!). Položky D, E, F, G, H, L a M následují v rámci téže struktury (A) za položkou C s klauzulí OCCURS DEPENDING, a proto mají proměnné adresy (položky H, L a M dokonce "dvojnásobně"). Pozor, položka C(1) - jakkoliv má v popisu klauzuli OCCURS DEPENDING - má pevnou adresu i pevnou délku! Poznámka: Změní-li se hodnota celočíselné položky uvedené za DEPENDING, změní se tím proměnné adresy všech položek následujících za tímto polem proměnné délky v rámci téže struktury až do jejího konce (tj. až po nejbližší následující položku s číslem úrovně 01 nebo 77, která má opět pevnou adresu určenou pomocí celých-čísel-2). Samotnou změnou hodnoty položky uvedené za DEPENDING se ovšem obsah úseku paměti přiděleného naší struktuře nezmění (žádné přesuny obsahu paměti se neprovádějí), takže všechny tyto následující položky získají nové obsahy odpovídající jejich novým adresám. Příklad: 01 A. 02 B PIC XX OCCURS 10 DEPENDING V. 02 C PIC XXX. : MOVE 8 TO V. MOVE 'ABCDEFGHIJKLMNOPRST' TO A. DISPLAY C. MOVE 3 TO V. DISPLAY C. MOVE 5 TO V. DISPLAY C. MOVE 0 TO V. DISPLAY C. Položka A má proměnnou délku rovnou 2*V+3 byty, takže příkaz MOVE naplní prvních 19 bytů z celkových 23 bytů vyhrazených pro položku A (zbylé 4 byty zůstanou nezměněny). Toto obsazení paměti vyhrazené pro položku A se během našich příkazů již nezmění nezávisle na změnách položky V. Položka C má proměnnou adresu, která je při každém použití položky C znovu vypočítávána jakožto adresa položky A zvětšená o dvojnásobek okamžité hodnoty položky V. I když není proveden žádný příkaz, který by explicitně měnil obsah položky C, přesto každou změnou hodnoty položky V se vždy změní adresa položky C, čímž položka C získá nový obsah, a to ten obsah, který již dříve existoval na této nové adrese. (Pozor, výpočet adresy položky C se provádí nikoliv při provádění příkazu "MOVE něco TO V", nýbrž až při provádění příkazu "DISPLAY C"; podobně výpočet délky položky A se provádí až při provádění příkazu "MOVE něco TO A".) Vytiskne se postupně RST, GHI, KLM a ABC. Pravidla: 1) Celočíselná numerická položka uvedená za slovem DEPENDING smí mít kvalifikaci, nesmí však mít indexy ani proměnnou adresu (tj. nesmí být popsána ve struktuře za položkou s klauzulí OCCURS DEPENDING). 2) Celé-číslo-2 uvedené v klauzuli OCCURS se při uvedení klauzule DEPENDING používá pouze pro určení, pro kolik opakování položky má překladač reservovat paměť - má tedy vliv pouze na to, jaká adresa bude přidělena první následující položce s číslem úrovně 01 nebo 77. (To se ovšem týká pouze WORKING-STORAGE SECTION a COMMUNICATION SECTION, kde překladač skutečně přiděluje položkám paměť. Ve FILE SECTION může mít celé-číslo-2 vliv na hodnotu parametru RECSIZE (viz 4.4.3.), jiný význam nemá. V LINKAGE SECTION nemá celé-číslo-2 žádný význam a může mít zcela libovolnou hodnotu (např. 1). V průběhu výpočtu je pak již ve všech případech celé-číslo-2 bezvýznamné.) 3) Uživatel musí zajistit, aby při provádění kteréhokoliv příkazu zpracovávajícího položku s proměnnou délkou nebo s proměnnou adresou všechny celočíselné položky uvedené za příslušnými slovy DEPENDING existovaly (tzn. měly přidělené úseky paměti) a měly přípustné numerické obsahy. Mimo provádění těchto příkazů však tyto položky smí neexistovat anebo mít nepřípustné obsahy. Je obvyklé, aby hodnota celočíselné položky uvedené za slovem DEPENDING byla nezáporná a nejvýše rovná celému-číslu-2 z téže klauzule OCCURS, není to však vyžadováno ani kontrolováno. Při překročení těchto hranic ručí ovšem sám programátor za případné přemazání položek z úseků paměti předcházejících nebo následujících za naším polem. 4) Položka s klauzulí OCCURS DEPENDING nesmí být podřízena položce s klauzulí OCCURS (ať už s DEPENDING nebo bez DEPENDING). Tedy délka úseku paměti, který se opakuje vzhledem k některé klauzuli OCCURS, musí být vždy pevná (smí však být i větší než 32767 bytů). (Obráceně je přípustné, aby položka s OCCURS DEPENDING měla podřízené položky s klauzulí OCCURS, ovšem již bez DEPENDING. Jinak řečeno: při několika OCCURSech v sobě smí pouze ten nejvyšší z nich mít podklauzuli DEPENDING.) 5) Položka s klauzulí OCCURS DEPENDING nesmí být podřízena položce s klauzulí VALUE. 6) Je-li prováděna redefinice na jiné úrovni než 01, pak ani částí redefinovaného úseku paměti ani částí redefinujícího úseku paměti nesmí být položka s klauzulí OCCURS DEPENDING (oba úseky tedy musí mít pevné délky). (Při redefinici na úrovni 01 však obojí přípustné je.) Použití: Klauzule OCCURS DEPENDING se v praxi používá především při zapisování logických vět s proměnnými délkami pomocí příkazů WRITE a RELEASE a při prohledávání tabulek proměnné délky pomocí příkazů SEARCH. Dále pak při třídění těchto tabulek v paměti pomocí příkazů CALL 'ICSORT', CALL 'ICSORTM' a CALL 'ICSORTP' a snad též při provádění příkazů CALL (předávají-li se délky argumentů), UNSTRING, INITIALIZE, EXAMINE a INSPECT. Položky s proměnnou adresou (tj. popsané v rámci 01 za položkou s OCCURS DEPENDING) se v praxi používají velmi zřídka, neboť zpomalují zpracování; je vhodné se jim podle možnosti vyhnout. Příklad: 01 SKOLA. 02 KLUK PIC X(10) OCCURS 500 DEPENDING POCET-KLUKU. 02 HOLKA PIC X(10) OCCURS 500 DEPENDING POCET-HOLEK. 02 KANTOR PIC X(10) OCCURS 40 DEPENDING POCET-KANTORU. 02 SKOLNIK PIC X(10) OCCURS 10 DEPENDING POCET-SKOLNIKU. Zde je zcela lhostejné, jaká celá čísla jsou uvedena za slovy OCCURS, jen když jejich součet není menší než maximální počet všech lidí ve škole dohromady. Tato celá čísla mají ve WORKING-STORAGE SECTION vliv pouze na to, že pro položku SKOLA je reservováno celkem 10500 bytů (ve FILE SECTION mohou mít vliv na určení parametru RECSIZE, v LINKAGE SECTION jsou zcela bezvýznamná). V našem případě by bylo možné zpracovávat všechny kategorie dohromady; pracovali bychom s položkou KLUK(I), kde by index I rostl od jedné až po součet položek POCET-KLUKU, POCET-HOLEK, POCET-KANTORU a POCET-SKOLNIKU. Při různých délkách by bylo nezbytné zpracovávat každou kategorii zvlášť; je však třeba si uvědomit, že např. před začátkem naplňování položek KANTOR(I) je třeba naplnit a nadále již neměnit položky POCET-KLUKU a POCET-HOLEK. Příklad: 01 FAKTURA. 02 PEVNA-CAST PIC X(30). 02 MATERIAL PIC X(18) OCCURS 50 DEPENDING N. Příkaz "WRITE FAKTURA" zapíše logickou větu o délce 30+18*N bytů.