VYSOKÁ ŠKOLA BÁŇSKÁ – TECHNICKÁ UNIVERZITA OSTRAVA FAKULTA ELEKTROTECHNIKY A INFORMATIKY
COBOL Tutoriál jazyka
Školní rok: Vypracovali Milan Chaloupka Tomáš Piprek Tomáš Sobotík Jan Stočeš Rostislav Žólty
Studijní skupina LB277 LB277 LB277 LB277 LB277
2006 / 2007 Osobní číslo cha162 pip009 sob100 sto219 zol005
Obsah: 1 Základní informace o jazyku: .............................................................................................3 1. 1 Hlavní využití - bankovnictví......................................................................................4 1. 2 Vývojová prostředí ....................................................................................................4 1. 3 Některé charakteristiky aplikací napsaných v COBOLU ............................................5 2 Zápis programu v COBOLU...............................................................................................5 2. 1 Syntaxe jazyka COBOL..............................................................................................6 2. 2 Obecná pravidla pro zápis...........................................................................................7 2. 3 Struktura programu.....................................................................................................7 3 Datové typy........................................................................................................................8 3. 1 Deklarace dat..............................................................................................................9 4 Základní příkazy oddílu procedur .....................................................................................10 5 Příkazy pro opakování části kódu - cykly...........................................................................13 5. 1 PERFORM…PROC .................................................................................................13 5. 2 PERFORM…THRU.................................................................................................14 5. 3 PERFORM…TIMES................................................................................................14 5. 4 PERFORM…UNTIL................................................................................................15 5. 5 PERFORM…VARYING..........................................................................................16 6 Podmínka IF.....................................................................................................................16 7 Práce se soubory...............................................................................................................17 7. 1 Soubory se záznamy .................................................................................................17 7. 2 Instance záznamu vs. Typ záznamu...........................................................................17 7.3 Vyrovnávací paměť zápisu ........................................................................................18 7.4 Deklarace záznamů a souborů....................................................................................19 7.4.1 Vytvoření záznamu .............................................................................................19 7.4.2 Deklarace bufferu záznamu v programu ..............................................................19 7.4.3 Klauzule vybrání a přiřazení ...............................................................................20 7.5 Zacházení se soubory.................................................................................................20
2
1 Základní informace o jazyku: COBOL (COmmon Business Oriented Language) vznikl v roce 1959. Byl vytvořen za společné snahy firem Burroughs Corporation, IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand a Sylvania Electric Products ve spolupráci s vládními organizacemi Spojených států, a to US Air Force, David Taylor Model Basin a National Bureau of Standards (nyní NIST). Popudem k vytvořením nového jazyka byl seminář s názvem "Programování/Tvorba SW", který se konal ve dnech 28.-29. května roku 1959 na Pensylvánské univerzitě. V rámci semináře se konala schůzka významných počítačových uživatelů a firem, která měla rozhodnout o možnosti a účelnosti vytvoření jazyka, který by byl zaměřen na zpracování dat pro podnikání. Snaha o vytvoření nového jazyka byla inicializována potřebou jazyka, který umožní vytvoření programu v minimálním časovém úseku a s minimálním úsilím. Zápis programu v jazyce, který je blízký angličtině. Plně zdokumentovaný výsledný program. A navíc snadno portovatelný mezi různými platformami. Zúčastnění se shodli na vhodnosti vytvoření takového jazyka a vytvořili organizaci CODASYL (Conference On Data SYstem Languages), jako dobrovolné sdružení uživatelů a výrobců počítačů, kterou pověřili vytvoření jazyka, jenž by specifikované požadavky splňoval. Pracovní skupinu nazvanou "Short Range Commitee" zpočátku tvořilo šest lidí, kteří pracovali velmi rychle. Již 17. prosince 1959 byl výkonnému výboru předložen první návrh jazyka COBOL. Jazyk vycházel z již existujících jazyků a jejich kompilátorů. Byly to jazyky FLOWMATIC, AIMACO a IBM Commercial Translator. Tato první verze se označuje jako COBOL60. Následovně pak v letech 1968, 1974, 1985 prošel COBOL standardizací ANSI. A v roce 2002 standardizaci ANSI/ISO. COBOL z roku 2002 již můžeme považovat za objektový. V posledních letech se do jazyka COBOL investovaly a stále investují značné prostředky, a tak se z něj stal naprosto rovnocenný partner mnoha jazyků, a to v GUI, OO i WEB pohledu. Taktéž i jako RAD (Rapid Development Tools) je zcela srovnatelný s jinými jazyky. Na úvod klasický příklad „Hello world“ v jazyku COBOL Př. 1: Hello world
000100 000200 000300 000400 000500 000600 000700 000800 000900 001000 001100 101200 101300 101400 101500 101600
IDENTIFICATION DIVISION. PROGRAM-ID. HELLOWORLD. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. RM-COBOL. OBJECT-COMPUTER. RM-COBOL. DATA DIVISION. FILE SECTION. PROCEDURE DIVISION. MAIN-LOGIC SECTION. DISPLAY "Hello world!" STOP RUN.
3
1. 1 Hlavní využití - bankovnictví Celosvětově představuje COBOL dle různých průzkumů nejméně polovinu ze všech obchodních a finančních aplikací, a to především pokud jde o skutečně velké firmy. Největší využití má COBOL v dnešní době v oblasti bankovnictví, velké finanční korporace stále hledají vývojáře, kteří ovládají tento jazyk 1. 2 Vývojová prostředí → Nejzajímavější výrobci vývojových prostředí COBOL Projdeme-li se po webových stránkách tak zjistíme, že o Cobol se skutečně zajímají největší světové firmy z oblasti IT - z první desítky je jich 6: IBM, Microsoft, HP, Compaq Computer, Computer Associates a Hitachi. IBM Cobol je podporován vlastními produkty na všech platformách od OS/2 a Windows přes AS/400 a AIX až po OS/390. Pro nový 64-bitový OS zatím nejsou podrobnější informace, ale při rozsahu existujících mainframe aplikací se dá Cobol i tam předpokládat. Merant Micro Focus Jeden ze světově nejvýznamnějších dodavatelů kompilátorů a vývojových prostředí pro Cobol. Na rozdíl od všech ostatních má díky lokální podpoře i významné místo v Česku a na Slovensku. Po 16-bitových Professional Cobol, Toolset a Workbench byl v roce 1996 nějaký čas dodáván praktický a poměrně levný 32-bitový Visual Object Cobol. Brzy byl však nahrazen produktem NetExpress, který má většinu výše popisovaných špičkových vlastností. Vývojová prostředí a kompilátory Merant výrazně podporují též prostředí mainframe a UNIX. Fujitsu Software Patří mezi nejaktivnější podporovatele nových trendů Cobolu v celosvětovém měřítku. Kromě výše zmíněných aktivit v oblasti OO a WEB stojí za zmínku, že v říjnu 2000 uzavřel $15 milionový kontrakt s Indian Computer Institute Association jako exklusivní dodavatel COBOL vývojových a souvisejících výukových nástrojů pro více než 800 tisíc indických studentů. Acucorp Velice dynamicky se rozvíjející dodavatel Cobolu, jehož strategie je založena především na přenositelnosti. Kompilátory Acucobol překládají do obecného mezikódu, který je pak s pomocí příslušných run-time modulů provozovatelný bez jakýchkoliv úprav na všech myslitelných HW platformách a operačních systémech. Kromě těchto vývojových prostředí od velkých společností v dnešní době existuje i mnoho tzv. „free“ vývojových prostředích a kompilátorů, které lze nalézt na webových portálech věnovaných tomuto jazyku. → Další vývojová prostředí: www.infogoal.com/cbd/cbdtol.htm
4
→ Kompilátory: www.infogoal.com/cbd/cbdcmp.htm Z této široké nabídky si určitě vybere, každý kdo chce vytvářet programy v tomto jazyce a to na jakékoliv platformě. Mě osobně však nejvíce zaujal plugin do vývojového prostředí Eclipse, které je mezi studenty velice populární. Plugin stačí pouze stáhnout a nakopírovat do složky s eclipsem. Musíte však mít novou verzi Eclipsu (verze 3.2 ) Podrobný návod je na uvedené adrese. Plugin možno stáhnout zde: → www.eclipse.org/cobol Na webu existuje ještě mnoho dalších zdrojů, odkud je možné získat vývojové prostředí a kompilátor jazyka, zde jsou uvedeny pouze zdroje, kde se nachází pouze zdroje, které mne nejvíc zaujaly, a kde se nachází nejvíc možností pro výběr požadované platformy atd. 1. 3 Některé charakteristiky aplikací napsaných v COBOLU Většina aplikací napsaných v COBOLU se skládá z více než 1 000 000 řádků kódu. Tyto aplikace mají velmi dlouhou životnost, protože tyto rozsáhlé aplikace nemohou být jednoduše nahrazeny když se objeví nějaký nový programovací jazyk nebo technologie. Tudíž bankovní a jiné finanční aplikace staré 10 – 30 let napsané v COBOLU jsou zcela běžné. Druhým důvodem, proč se tyto aplikace i dnes píší v tomto jazyku – a nepřipisují se do „moderních“ jazyků, je bezpečnost. Nikdo nechce riskovat ztrátu důležitých a citlivých dat, které představují ohromné finanční prostředky. Z tohoto důvodu COBOLovské aplikace obvykle běží v kritických oblastech obchodu a finančnictví. Pro představu přes 95 % finančních aplikací je napsáno právě v COBOLU. Tyto aplikace musí pracovat s ohromným množstvím dat. Databáze o velikosti měřené v terabytech není nezvyklá. COBOL je jednoduchý jazyk (neobsahuje žádné pointery, uživatelem definované funkce a datové) s omezeným rozsahem funkcí. Toto podporuje jednoduchý a přímý programovací styl. Řekli jsme, že COBOL je velice jednoduchý jazyk s omezeným rozsahem funkcí. Ovšem OO-COBOL (objektově orientovaný) toto vše mění. Tato verze jazyka zachovává všechny jeho výhody předešlých verzí a nově mimo jiné zahrnuje: § § § § §
Uživatelem definované funkce Objekty Dynamicky alokaci paměti (pointery) Uživatelem definované datové typy Národní znakové sady – Unicode
2 Zápis programu v COBOLU Kdysi byly programy v COBOLu psány na formulář a poté převedeny na děrné štítky. Dnes se však většina programů zadává přímo do počítače. V COBOLu však dodnes přetrvaly některé požadavky na formátování z doby děrných štítků, a proto se program zapisuje v 80místných řádcích. Každý řádek se pak rozděluje následovně. Sloupec 1-6 se nazývá číslovací řádek. Sloupec 8-11 oblast A. Sloupec 12-72 oblast B. A poslední část řádku pak oblast pokračovací. I přesto však některé kompilátory tyto pravidla ignorují.
5
Pokud kompilátor rozeznává tyto 2 oblasti, všechny názvy oddílu, sekcí, odstavců, FD záznamů a čísel úrovně 01 musí začínat v oblasti A. Všechny ostatní přikazy musí začínat v oblasti B. 2. 1 Syntaxe jazyka COBOL Někdy se také nazýva COBOL MetaLanguage. Slova velkými písmeny jsou vyhrazená slova. Pokud jsou podtržená, jsou povinná, jinak slouží hlavně k lepší čitelnosti zdrojového kódu. Vzhledem k tomu, že byl COBOL navržen tak, aby se podobal běžnému vyjadřování v angličtině je v něm hodně slov, která mohou být vypuštěna a slouží jen k lepší orientaci. Slova psaná různou velikostí písma představují jména zvolená programátorem (například jména proměnných). Pokud je část kódu ve složených závorkách { }, musí se provést část kódu uvnitř těchto závorek. Pokud je uvnitř pouze jedna možnost, je povinná. Kód v hranatých závorkách [ ] označuje volitelný kód. Symbol elipsy … (tři tečky) označuje, že předchozí výraz může být opakován podle uvážení programátora. Vyhodnocení aritmetických funkcí v COBOLu a přiřazení výsledku do proměnné je prováděno příkazem COMPUTE:
Syntaxe příkazu COMPUTE:
→ Vysvětlení: Klíčové slovo COMPUTE je následováno názvem proměnné (případně více proměnnými – symbol „…“) použitými pro vykonání příkazu. Symbol „…“ je umístěn mimo složené závorky, což chápeme tak, že každá proměnná může mít svou zaokrouhlenou hodnotu. Hranaté závorky označují následující výraz jako volitelný, ale pokud bude použitý, je třeba vybrat ze dvou uvedených možností ON SIZE ERROR nebo NOT ON SIZE ERROR. Protože END-COMPUTE je v hranatých závorkách musí být vykonán jen pokud je použito SIZE ERROR nebo NOT SIZE ERROR. V praxi vypadá přikaz COMPUTE například takto: COMPUTE Result1 ROUNDED, Result2 = ((9*9)+8)/5 Proměnné Result1 bude přiřazena hodnota 18 a Result2 bude přiřazena hodnota 17,8
6
2. 2 Obecná pravidla pro zápis Všechna uživatelem definovaná jména jako jména proměnných, odstavců a oddílů musí splňovat následující podmínky: § Musí obsahovat 1-30 znaků, z toho alespoň jeden znak z abecedy A-Z. § Nesmí začínat ani končit pomlčkou. § Musí se skládat ze znaků A-Z a číslic 0-9 a pomlčky. § Nesmí obsahovat mezery. § Nezáleží na velikosti písmen. 2. 3 Struktura programu Program je v COBOLU rozdělen do čtyř částí (oddílů), tzv. division. Tím je ve zdrojovém kódu postaráno o přehlednost. Tyto části jsou následující. Identifikační část (IDENTIFICATION DIVISION) obsahuje řadu informací k pojmenování a dokumentování zdrojového programu. Tato část nemá žádný vliv na program. Strojová část (ENVIROMENT DIVISION) popisuje pro program nezbytné hardwarové okolí. Datová část (DATA DIVISION) se používá k popisu datových souborů, které budou v programu zpracovány. Tyto datové soubory obsahují popisy datových vět, konstanty a proměnné. Údaje v této části se nazývají definice a klauzule. Výkonná část (PROCEDURE DIVISION) obsahuje řadu výkonných příkazů, které společně s definovanými datovými soubory tvoří program. Údaje v této části se nazývají příkazy. Dodržuje se určitá hierarchie, podobně jako v ostatních jazycích. Každý program se skládá z oddílů, sekcí, odstavců, vět a výrazů, což je obdoba funkcí a procedur z ostatních jazyků. → Oddíl (Division) Blok kódu, obvykle obsahující jednu a více sekcí. Začíná jménem oddílů a končí jménem dalšího. → Sekce (Section) Blok kódu, obsahující několik odstavců Příklad: SelectUnpaidBills SECTION. FILE SECTION. → Odstavec (Paragraph) Blok kódu tvořený několika větami Příklad: PrintFinalTotals. PROGRAM-ID. → Věty (Sentences) a příkazy (Statements) Příklad: MOVE .21 TO DPH MOVE 1235.76 TO CenaZbozi COMPUTE CelkovaCena = CenaZbozi * DPH Příkazy se skládají z klíčových slov, operátorů a operandů.
7
Př. 2: Ukázka jednoduchého programu a jeho rozdělení na výše uvedené části IDENTIFICATION DIVISION. PROGRAM-ID. SequenceProgram. AUTHOR. ???????. DATA DIVISION. WORKING-STORAGE SECTION. 01 Num1 PIC 9 VALUE ZEROS. 01 Num2 PIC 9 VALUE ZEROS. 01 Result PIC 99 VALUE ZEROS. PROCEDURE DIVISION. Vypocti. ACCEPT Num1. ACCEPT Num2. MULTIPLY Num1 BY Num2 GIVING Result. DISPLAY "Výsledek je: = ", Result. STOP RUN.
Minimální verze programu:
IDENTIFICATION DIVISION. PROGRAM-ID. NejmensiProgram. PROCEDURE DIVISION. Zobrazeni. DISPLAY "Hello world". STOP RUN.
3 Datové typy V COBOLu lze obdobně jako v ostatních jazycích používat více datových typů. Nyní si ukážeme jejich deklaraci a použití. V COBOLu jsou tři kategorie dat: § proměnné § literály § konstanty → Proměnné Jméno proměnné slouží identifikaci rezervované oblasti paměti, ve které je proměnná uložena. Každá proměnná v COBOLu musí být popsána v DATA DIVISION. Musíme taká určit datový typ proměnné. Ty jsou v COBOLu 3: numeric (obdoba integer), alphanumeric (string) a alphabetic. COBOL však neprovádí silnou typovou kontrolu, proto lze například do proměnné typu numeric uložit string, což však často způsobuje pád programu, a proto je třeba na to dávat pozor.
8
Tyto datové typy se označují: • • •
Alphabetic (PIC A) Alphanumeric (PIC X) Numeric (PIC 9)
→ Literály Obsahují pouze hodnotu výrazu. Nelze na něj odkazovat jménem. Jedná se o konstantní data. Jsou dva typy literálů: § string – obsahující libovolné znaky § numeric - obsahující čísla. → Figurativní konstanty Na rozdíl od ostatních programovacích jazyků COBOL neumožňuje vytvoření uživatelem definovaných konstant. Místo toho poskytuje tyto figurativní konstanty. Mohou být použity na všech místech kde literály, ale po přiřazení k proměnné přepíší celý její obsah. Figurativní konstanty jsou: SPACE or SPACES
Chovají se jako 1 mezera
ZERO or ZEROS or ZEROES
1 nebo více nul
QUOTE or QUOTES
Nahrazení uvozovek
HIGH-VALUE or HIGHVALUES
Použití maximální hodnoty
LOW-VALUE or LOW-VALUES Použití minimální hodnoty ALL literal
Umožní běžnému literálu chování jako fig. konstanta
3. 1 Deklarace dat Protože COBOL není typovaný jako Modula-2 nebo C, používá jiný způsob deklarace – deklarace příkladem, která se musí nacházet v DATA DIVISION.
PIC 9(6) PIC 9(6)V99 PICTURE X(10) PIC S9(4)V9(4) PIC 9(18)
shodné shodné shodné shodné shodné
s s s s s
PICTURE 999999 PIC 999999V99 PIC XXXXXXXXXX PIC S9999V9999 PIC 999999999999999999
9
9
Znázorňuje výskyt číslice
X
Libovolný znak
A
Libovolný znak abecedy A-Z a mezera
V
Znázorňuje pozici desetinné čárky
S
Znázorňuje výskyt znaku, může být použit pouze na začátku
Číselné hodnoty mají maximální delku 18 číslic a délka řetězce (string) je závislá na konkrétním systému.
4 Základní příkazy oddílu procedur Oddíl procedur obsahuje příkazy pro manipulaci s daty popsanými v DATA DIVISION. →
Práce se vstupem a výstupem
Pro čtení dat z klávesnice se používá příkaz ACCEPT a pro zobrazení DISPLAY
ACCEPT Num1
uloží do proměnné Num1 vstup z klávesnice
ACCEPT DnesniDatum FROM {DATE} uloží do proměnné DnesniDatum systémový čas DISPLAY "Toto je tutorial k jazyku " JmenoJazyka. Vypíše na obrazovku text
v uvozovkách a obsah proměnné.
→ Přiřazování hodnot pomocí příkazu MOVE MOVE Zdroj TO Cil…
Příkaz MOVE kopíruje data z jednoho zdroje do jednoho a více cílů. Pokud je délka zdroje kratší, zbytek je vyplněn nulami nebo mezerami. Pokud je větší, přebývající část se zahodí. → Aritmetické operace Ve většině procedurálních jazyků jsou výpočty prováděny přiřazením výsledku aritmetického výrazu nebo funkce do proměnné. V COBOLu je příkaz COMPUTE používán pro vyhodnocení aritmetických výrazů, ale také používa samostatné příkazy pro sčítání, odčítání, násobení a dělení.
10
→ Zaokrouhlování Používá se příkaz ROUNDED Příklady zaokrouhlení
Proměnná Aktuální hodnota Oříznutý výsledek Zaokrouhlený výsledek PIC 9(3)V9 123.25 123.2 123.3 PIC 9(3)V9 123.247 123.2 123.2 PIC 9(3) 123.25 123 123 K ošetření chyb se používá příkaz ON SIZE ERROR Dělení nulou vždy způsobí chybu SIZE ERROR
→ Sčítání Syntaxe:
→ Vysvětlení: Pokud je použitý příkaz GIVING, tak se vše před ním je sečteno a výsledek je uložen do proměnné Result. Pokud není použitý, všehno před slovem TO je sečteno a výsledek je přičten ke každé proměnné ValueResult → Odčítání Syntaxe:
→ Vysvětlení:
Pokud je použito slovo GIVING, vše před FROM je sečteno dohromady a výsledek je odečten od Value po slově FORM a výsledek je uložen do každé proměnné Result. Pokud není použito, vše před slovem FROM je sečteno dohromady a výsledek je odečten od každé proměnné ValueResult po slově FROM
→ Násobení Syntaxe:
11
→ Vysvětlení: Pokud je použito slovo GIVING, proměnná vlevo od slova BY je vynásobena proměnnou Value napravo do slova BY a výsledek je uložen do každé proměnne Result.Pokud není slovo GIVING použito, proměnná Value vlevo od BY je vynásobena každou hodnotou ValueResult. Každý dílčí výsledek je uložen do proměnné ValueResult. → Dělení COBOL umožňuje dělení s a bez zbytku. Syntaxe:
→ Vysvětlení:
Pokud je použito slovo GIVING, proměnná Value vlevo od BY nebo INTO je vydělena Value napravo. Pokud není použito slovo GIVING, proměnná vlevo od INTO je vydělena každou hodnotou ValueResult. Výsledek každého výpočtu je uložen do ValueResult.
Syntaxe:
→ Vysvětlení:
V tomto kódu proměnná Val vlevo od BY nebo INTO je vydělena Val napravo. Podíl je přiřazen do Quot a zbytek do Rem.
→ Příkaz Compute Syntaxe:
→ Vysvětlení:
COMPUTE přiřadí výsledek aritmetického výrazu proměnné. Aritmetický výraz je vyhodnocen pomocí běžných pravidel.
12
5 Příkazy pro opakování části kódu - cykly Skoro ve všech programovacích jazycích existují příkazy na opakování určité části kódu. → Nejčastější jsou: repeat, while a for. Rozlišení podoby příkazů mezi jazykem C a jazykem COBOL: Jazyk C do{} while while for
COBOL
přirozený jazyk :-)
Perform Until
Opakuj dokud…testování na konci
Perform Until Perform
Opakuj dokud…testování na začátku Opakuj n krát
V této části si ukážeme, jak vytvořit cykly, podobné těm z jazyka C (do while, while, for) 5. 1 PERFORM…PROC Jestli jste psali programy v jiných programovacích jazycích, určitě jste se dostali k tzv . „podprogramu“ (část kódu, která je vykonána, když je v programu zavolána). V COBOLu jsou také podprogramy, které se dělí do dvou částí: § §
Otevřené podprogramy Uzavřené podprogramy
Otevřené podprogramy jsou implementovány použitím příkazu PERFORM. Uzavřené podprogramy jsou implementovány použitím příkazu CALL a obsáhlými nebo externími podprogramy. Základní syntaxe příkazu PERFORM: PERFORM [první příkaz [{THRU nebo THROUGH}příkaz, kterým se ukončí PERFORM]] Teď si ukážeme nejjednodušší použití příkazu PERFORM, a to za použití tzv. „skoku“ do jiné procedury: Př. 3: Příkaz Perform
$ SET SOURCEFORMAT"FREE" IDENTIFICATION DIVISION. PROGRAM-ID. Perform1. AUTHOR. LB277. * Ukazka pouziti prikazu Perform. PROCEDURE DIVISION. Prvni. DISPLAY "Prvni. Tady zacina program" PERFORM Jednicka DISPLAY "Zpatky v Prvni.". STOP RUN. Dvojka. DISPLAY ">>>>>>>> Ted pracuje Dvojka." PERFORM Trojka. DISPLAY ">>>>>>>> Zpatky ve Dvojce.". Jednicka. DISPLAY ">>>> Ted pracuje Jednicka" PERFORM Dvojka DISPLAY ">>>> Zpatky v Jednicce". Trojka. DISPLAY ">>>>>>>>>>>> Ted pracuje Trojka".
13
→ Vysvětlení: Program začíná v příkazu První. Vypíšeme informaci, že se nacházíme v První a pak se pomocí příkazu PERFORM přesouváme do příkazu Jednicka. Z jedničky voláme Dvojku….a tak to probíhá až celý program zase skončí v Prvni a vypíše toto na výpis. 5. 2 PERFORM…THRU Další použití příkazu PERFORM je za použití příkazu THRU (Dělej dokud). Zde můžeme použít také podmínku IF. Př. 4: Použití Perform a THRU PROCEDURE DIVISION Begin. PERFORM Delej THRU DelejExit STOP RUN. Delej. Příkazy Příkazy IF ErrorFound GO TO DelejExit END-IF Příkazy Příkazy IF ErrorFound GO TO DelejExit END-IF Příkazy Příkazy Příkazy IF ErrorFound GO TO DelejExit END-IF Příkazy Příkazy Příkazy Příkazy DelejExit. EXIT.
→ Vysvětlení:
Zde už na začátku chceme, aby byl program vykonávaný dokud ho nějaký příkaz nepošle nakonec. Podmínkou IF rozhodujeme, jestli program pošleme nakonec nebo jeho průběh pustíme dál.
5. 3 PERFORM…TIMES Dále můžeme příkaz PERFORM použít za užití klíčového slova TIMES. (Tato část je lehce podobná známému příkazu for) Zde si přesně určíme, kolikrát se má určitý blok kódu opakovat. → Sytaxe:: PERFORM [první příkaz [{THRU nebo THROUGH}příkaz,kterým se ukončí PERFORM]] RepeatCount TIMES 14
Př. 5 Použití PERFORM a TIMES $ SET SOURCEFORMAT"FREE" IDENTIFICATION DIVISION. PROGRAM-ID. PERFORM_TIMES. AUTHOR. LB277. * Pouziti prikazu PERFORM…TIMES. DATA DIVISION. WORKING-STORAGE SECTION. PROCEDURE DIVISION. Begin. DISPLAY "Zacina program" PERFORM 3 TIMES DISPLAY ">>>>Budu opakovat trikrat stejnou vetu" END-PERFORM DISPLAY "Hotovo" STOP RUN.
5. 4 PERFORM…UNTIL Tento příkaz se dá přirovnat příkazu (do) while. → Sytaxe:: PERFORM [první příkaz [{THRU nebo THROUGH}příkaz,kterým se ukončí PERFORM]] [Test (na začátku/na konci)] UNTIL podmínka Test na konci je podobný příkazu do, a test na začátku příkazu while.
Př. 6 Použití PERFORM a UNTIL
READ ZaznamyStudentu AT END SET EndOfStudentFile TO TRUE END-READ PERFORM WITH TEST BEFORE UNTIL EndOfStudentFile Zde se vykonavaji prikazy
READ ZaznamyStudentu AT END SET EndOfStudentFile TO TRUE END-READ END-PERFORM
15
→ Vysvětlení:
Na začátku chci, ať program pracuje tak dlouho, dokud není proměnná True. Na konci tuto proměnnou nastavím na True a program kvůli podmínce skončí.
5. 5 PERFORM…VARYING Typické použití příkazu For v jazyce COBOL. → Syntaxe:: PERFORM CountRecords VARYING RecCount FROM 1 BY 1 UNTIL EndOfFile
6 Podmínka IF Syntaxe je naprosto totožná s rozšířenějšími programovacími jazyky. Podmínka začíná příkazem IF následuje příkaz pro podmínku a pak příkaz pro vykonání THEN. V těle se vykoná určitý příkaz. Pokud budeme chtít zařadit do podmínky příkaz pro plnění, že podmínka nebyla splněna, tak následuje ELSE a příkazy pro vykonání. Celý blok s podmínkou musí končit příkazem END IF. Př. 7 Použití IF ELSE $ SET SOURCEFORMAT"FREE" IDENTIFICATION DIVISION. PROGRAM-ID. IF. AUTHOR. LB277. * Ukazka pouziti podminky IF. PROCEDURE DIVISION. promenna IF promena THEN DISPLAY "Plnim podminku.". ELSE DISPLAY "Podmínka nebyla splnena.". END IF
16
7 Práce se soubory Ačkoli COBOL může být použit ke zpracování různých datových souborů, je zdaleka nejvíce používán pouze k zpracování zaznamenaných souborů. V COBOLu jsou v podstatě dva typy organizace souborů: § §
Soubory se sériovým přístupem (Sequential soubory v COBOLu) Soubory s přímým přístupem
V sériovém přístupu jsou záznamy organizovány a zpřístupňovány sériově. S přímým přístupem jsou záznamy organizovány do určité míry tak jak nám umožňuje přímý přístup k přesnému záznamu bez potřeby čtení předešlých záznamů.
7. 1 Soubory se záznamy COBOL je zásadně používán v situacích, kde je objem dat ke zpracování velký. V souborech založených na záznamu: § Používáme termíny jako soubor, který nám popisuje jednu nebo více skupin výskytů typů záznamů. § Dále používáme termíny jako záznam, který nám popisuje skupinu polí, které zaznamenávají informace o objektu. § Již zmiňovaný termín pole, který popisuje položky informací o zaznamenaném objektu.
7. 2 Instance záznamu vs. Typ záznamu
Je důležité odlišit instanci záznamu od typu záznamu. Každá instance záznamu v souboru má různou hodnotu, ale každý záznam v souboru má stejnou strukturu. V souboru o detailech studenta (uvedeno níže), jsou instance (výskyty) záznamů o studentovi aktuální hodnoty v souboru. Typ záznamu popisuje strukturu každé zaznamenané instance
17
7.3 Vyrovnávací paměť zápisu Předtím než počítač může dělat jakékoliv zpracování kousku dat, data musí být nahrána do hlavní paměti (RAM). CPU může totiž pracovat pouze s daty v RAM. Soubory se záznamy se mohou skládat ze stovek, tisíců i milionů záznamů (např. bankovní záznamy) a mohou požadovat až desítky gigabytů místa. Soubory takových velikostí nelze zpracovávat nahráním celých souborů do paměti najednou. Namísto toho jsou soubory zpracovány a načítány do paměti po jednotlivých záznamech. K zachování záznamů načtené v paměti a možnosti dostat se k přesným polím záznamů musí programátor deklarovat strukturu záznamu (obrázek níže) v jeho programu. Počítač použije programátorův popis záznamu (typ záznamu (šablona)) k nastavení instancí které chceme použít v programu. Paměť určená pro uchovávání záznamů je obvykle nazývána buffer záznamu. Buffer záznamu je pouze spojení mezi programem a záznamy v souboru.
18
7.4 Deklarace záznamů a souborů
Úvod Předpokládáme, že chceme vytvořit soubor k tomu, aby nám uchovával informace o objektech (v tomhle případě o studentech). Musíme nadefinovat jaké informace chceme uchovávat. Jelikož ukázka je na záznamu o studentech potřebujeme znát následující: § § § §
IdStud JmenoStud DatumNaroz KodKurzu
7.4.1 Vytvoření záznamu Podle toho jaké máme záznamy určíme jejich datové typy a počet míst, které budou zabírat. Následně rozdělíme do podskupin. (obr. vlevo dole) 7.4.2 Deklarace bufferu záznamu v programu Typ záznamu/šablona/buffer každého souboru použitého v programu musí být popsán v FILE SECTION jako FD (file description=popis souboru) vstup. Vstup FD se musí skládat z písmen FD a interního jméno souboru. (obr. vpravo dole)
19
7.4.3 Klauzule vybrání a přiřazení Ačkoliv máne soubor na disku se jménem Stud.dat odkazujeme se v programu na StudentiFile. Musíme spojit aktuální souborový název v programu s již existujícím souborem na disku. Interní soubor zadaný v FD vstupu se spojí s externím souborem na disku či jiném médiu pomocí klauzulí vybrání (SELECT) a přiřazení (ASSIGN). SELECT a ASSIGN je vstupem v sekci FILE-CONTROL v INPUT-OUTPUT SECTION v ENVIRONMENT DIVISION (jedné ze čtyř hlavních divizí v programech COBOL).
Syntaxe: SELECT FileName ASSIGN TO ExternalFileReference
7.5 Zacházení se soubory Existují čtyři slova, která nám zajišťují práci se soubory: § § § §
OPEN CLOSE READ WRITE
OPEN: Syntaxe: OPEN {INPUT or OUTPUT or EXTEND} InternalFileName
20
CLOSE: Syntaxe: CLOSE InternalFileName... READ: Syntaxe:
WRITE: Syntaxe: WRITE RecordName [FROM Identifier]
21