MONITOR IT-utbildning 15-1

31
MONITOR IT-utbildning COBOL från grunden Sortering 15-1

Transcript of MONITOR IT-utbildning 15-1

MONITOR IT-utbildning

COBOL från grunden Sortering

15-1

MONITOR IT-utbildning

COBOL från grunden Sortering

15-2

I detta kapitel skall vi ta en titt på hur vi kan använda sorteringsprogrammet från ett COBOL-program, s.k.

internsortering.

MONITOR IT-utbildning

COBOL från grunden Sortering

15-3

MONITOR IT-utbildning

COBOL från grunden Sortering

15-4

Vid sortering så finns det alltid en osorterad INFIL och en sorterad UTFIL. När sorteringsprogrammet

anropas från COBOL, kan det göras på liknande sätt som vid en BATCH-sortering; sorteringen baseras på

sorteringsuttryck och samtliga poster sorteras.

Vid en COBOL internsortering så läser COBOL-programmet poster från den osorterade filens i en Input

Procedure och kan där avgöra vilka poster från den osorterade infilen som skall överlämnas till

sorteringsprogrammet. Alla poster behöver ej släppas (Release) till sorteringsprogrammet, utan kan helt

enkelt förkastas. Posterna kan även förändras innan de överlämnas för sortering.

När sorteringen är avslutad hämtar COBOL-programmet varje sorterad post i en Output Procedure, (Return)

och där kan du avgöra vad du vill göra med den sorterade posten; kanske skriva till den sorterade utfilen eller

hanteras på annat sätt.

Möjligheterna med en internsortering är stora.

MONITOR IT-utbildning

Sorteringsprogrammet kräver en sorteringsfil, en virtuell fil, som bara används under själva sorteringen.

Alla filer som används vid sorteringen måste beskrivas i COBOL-programmet på vanligt sätt med Select och

FD, men sorteringsfilen beskrivs med ett SD-uttryck. Denna innehåller beskrivning av sorterade poster

COBOL från grunden Sortering

15-5

MONITOR IT-utbildning

Programmets infil och utfil beskrivs på vanligt sätt med Select- och FD-uttryck.

Sort använder en tänkt arbetsfil vid sorteringen som beskrivs med Select-uttryck på vanligt sätt, men den

har en Sortfile Description, SD i stället för FD. I dess postbeskrivning så skall samtliga sorteringsnycklar

finnas beskrivna. Dessa kommer senare att refereras i ett Sort-verb. Filen behöver EJ allokeras med JCL

vid exekvering av programmet.

COBOL från grunden Sortering

15-6

MONITOR IT-utbildning

Sort-verbet används för att starta själva sorteringen. Den sortfil (virtuell sortfil) som refereras innehåller

beskrivning över de sorterade posterna; nyckelvärden och övrig data. Sort kan ange flera sorteringsnycklar

(Key) med olika sorteringsordning.

I Sort-uttrycket anges om posterna skall hämtas från en fil (Using) eller om en procedur skall ges kontrollen

(Input Procedure) innan sorteringen alternativt om posterna skall skrivas till en fil (Giving) eller om

en procedur skall ges kontrollen (Output Procedure) efter sorteringen.

Input-Procedure används om du vill kunna ta hand om en post innan den är sorterad. I denna procedur

kan du förändra postens innehåll innan den skickas för sortering, eller helt förkasta den; den kanske inte skall

vara med i sorteringen. Du måste själv läsa posterna från den osorterade filen i denna procedur.

Using används om du vill använda den osorterade infilen utan förändring.

Output Procedure används för att ta hand om sorterade poster. Här kan du själv avgöra vad du vill

göra med de sorterade posterna. Om du vill skriva till en sorterad fil så gör du det i denna procedur. Du

kanske bara vill göra en utskrift av posten och då gör du det här. Alternativ kan vara att du vill spara den på

annat sätt, kanske i en intern tabell.

Giving används när du inte vill hantera sorterade poster själv, utan låta sorteringsprogrammet själv skriva

till filen.

Notera att du kan använda antingen Procedur eller fil för både indata och utdata.

När du använder Using eller Giving så öppnar och stänger COBOL dessa filer automatisk, men när du

använder en procedur så måste du själv öppna och stänga filen, samt även läsa och skriva.

COBOL från grunden Sortering

15-7

MONITOR IT-utbildning

I detta exempel så sker en helt vanlig sortering på nyckel med namnet Sortfil-Namn.

COBOL från grunden Sortering

15-8

MONITOR IT-utbildning

Sortfil, som är den tänkta filen som skall sorteras, är beskriven med en SD i Data Division. Här finns en

exakt beskrivning av posterna.

Denna sorteringsfil måste förses med poster. Detta kan göra genom att beskriva Using filnamn i Sort-verbet.

Då används de poster som finns i denna fil utan förändring.

Om du behöver göra ändring av de poster som finns i denna fil, så kan du använda en Input Procedure. I

denna procedur får du själv läsa poster från indata-filen, analysera innehållet och kanske förändra eller

förkasta. För att överlämna posten till COBOL för sortering använder du COBOL-verbet Release.

Du behöver inte ha en Infil utan data kan hämtas från en annan källa. Det kan t.ex. vara från en intern tabell,

men du överlämnar poster för sortering med Release.

Sorterade poster kan skrivas till en Utfil utan förändring efter sorteringen. Då anger du Giving i Sort-verbet.

Om du själv vill ta hand om de poster som COBOL har sorterat, dvs innehållet av Sortfil, så kan du ange en

Output Procedure. I denna procedur hämtar du själv sorterade poster, en efter en med verbet Return, och

behandlar dom hur du vill. Om du vill skriva till Utfil så kan du göra det, men posterna kan givetvis placeras

på annan plats. Det kan t.ex. vara en intern tabell med sorterat data.

COBOL från grunden Sortering

15-9

MONITOR IT-utbildning

I inputproceduren används Release för att frisläppa en post till sorteringsprogrammet. Varje Release ger en

(1) post, så du måste ha en slinga för att hämta osorterat data och sedan gör Release för varje post.

Den fil du har som en osorterad fil måste hanteras som andra filer; den måste öppnas och sedan läsas. I

exemplet ser du en slinga som läser samtliga poster från filen Sortin.

I villkoret Not At End kan du analysera posten och avgöra om den skall förändras eller ej eller kanske

förkastas.

COBOL från grunden Sortering

15-10

MONITOR IT-utbildning

I en Ouput Procedure hämtar du poster från den sorterade filen med Return. Du gör detta i en slinga och

använder villkoret AT End för att förstå när det inte finns fler sorterade poster att hämta.

Om du vill skriva den sorterade posten till en fil, så får du inte glömma att först öppna filen för skrivning.

Detta sker inte automatiskt som i fallet med Giving. I proceduren är du fri att ha egen logik.

COBOL från grunden Sortering

15-11

MONITOR IT-utbildning

Sort-Return är ett s.k. Special Register, vilket innebär att denna variabel inte behöver beskrivas, utan

finns inbyggd, och tilldelas ett värde som berättar med vilken retur-kod som sorteringsprogrammet

avslutades.

COBOL från grunden Sortering

15-12

MONITOR IT-utbildning

COBOL från grunden Adresser och pekare

18-1

MONITOR IT-utbildning

COBOL från grunden Adresser och pekare

18-2

I detta kapitel skall jag försöka reda ut hur strukturer adresseras, d v s hur programmet egentligen fungerar för att

referera ett dataelement eller en struktur.

MONITOR IT-utbildning

Adressering av strukturer sker genom att en basadress tilldelas en fysisk adress vid programexekveringen.

Denna adress varierar och beror på hur programmet exekveras; som huvudprogram eller subprogram, var

strukturen finns placerad m.m.

En struktur som består av flera element adresseras på så sätt att till basadressen adderas avståndet till det

element som refereras (Displacement/Offset). Avståndet till ett specifikt element är ju alltid detsamma, men

den fysiska placeringen av strukturen kan variera, dvs basadressen kan olika värde.

För att kunna referera en struktur så måste basadressen ha ett verkligt värde, annars uppstår ett exekveringfel

på grund av felaktig adress ( Program Check Interrupt; 0C4, 0C5), och COBOL avbrotthanterare kommer att

avsluta programmet onormalt (Abnormal End, ABEND)

COBOL från grunden Adresser och pekare

18-3

MONITOR IT-utbildning

Strukturer i Working-Storage Section är alltid adresserbara eftersom COBOLs initieringsrutiner skaffar

fysisk utrymme till hela WS. Kompilatorn bygger kod för att adressera elementen i WS med tekniken

Basadress + Tilläggsaddress, och ”run-time” försäkrar att basadressen har ett verkligt värde. Det kan aldrig

uppstå några exekveringsfel på grund av felaktig adress vid referens till element i WS.

Strukturer i Linkage Section adresseras med basadress och tilläggsadress på samma sått som WS, men du

måste själv ansvara för att basadressen har ett verkligt värde. Detta sker vanligen i samband med Call Using

WS-ref och beskrivningen Procedure Division Using LS-ref.

Andra sätt är att själv med programmering tilldela en verklig adress till en basadress.

COBOL från grunden Adresser och pekare

18-4

MONITOR IT-utbildning

Du kan själv deklarera en pekare. Detta görs genom att beskriva ett dataelement på valfri nivå, utan picture

och endast Usage is Pointer. Du kan även försäkra dig om att värdet inledningsvis är ogiltigt, genom

att ange Value Null.

För att tilldela ett värde till en pekare, eller pekarvariabel, kan du inte använda Move, utan tilldelning sker

med verbet Set. Genom att tilldela värdet Null till en pekarvariabel, kan du göra den ogiltig, vilket senare

kan konstateras i en jämförelse med Null.

Innehållet i pekare kan jämföras mot varandra eller mot värdet Null.

Du kan även använda en uttrycklig pekarvariabel som ett argument i ett Call-anrop.

18-5

COBOL påbyggnad Adresser och pekare

MONITOR IT-utbildning

Address Of är ett s.k. Special Register (jfr Return-Code) som är en underförstådd pekarbeskrivning.

När du behöver få tillgång till en strukturs adress använder du detta uttryck, eller tvärtom när du vill tilldela

en struktur ett värde från en pekare eller från en annan struktur.

En pekare kan tilldelas värdet Null (ogiltig) och kan användas i programlogik som du ser i detta exempel.

18-6

COBOL påbyggnad Adresser och pekare

MONITOR IT-utbildning

I detta exempel ser du en struktur som är beskriven i Linkage Section. Initialt så är detta bara en bild

över hur en Kundpost ser ut, men basadressen (Address of Kundpost) är ogiltig eftersom den inte

har blivit tilldelad något värde.

För att kunna använda denna Kundpost-struktur, så måste en verklig förekomst av Kundpost existera. I detta

exempel antar vi att det anropade programmet tillhandahåller en sådan via pekaren Minpekare. Efter

anropet görs en test om pekaren har ett giltigt värde och i så pall tilldelas denna pekares adress till Address

of Kundpost.

Nu kan de olika elementen i Kundpost refereras utan risk för exekveringsfel orsakad av felaktig adress.

18-7

COBOL påbyggnad Adresser och pekare

MONITOR IT-utbildning

COBOL från grunden Adresser och pekare

18-8

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-1

Övningar II

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-2

Innehållsförteckning

Uppgift 1 – Frequent Flyer File .......................................................................... 3 Övning 2 – Frequent Flyer Program .................................................................. 4 Övning 3 – Bonus Report ................................................................................... 5 Övning 4 – Frequent Flyer Mileage ................................................................... 6 Övning 5 – Mileage File ..................................................................................... 7 Övning 6 – Date-and-Day Program ................................................................... 8 Övning 8 – Airline ID ...................................................................................... 10 Övning 9 – Mileage Table, sort, pekare ........................................................... 11

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-3

Uppgift 1 – Frequent Flyer File

Denna fil är grunden för flertalet övningar. Filen innehåller information om olika flygresor som en person gjort. Uppgifter som datum (Flight-Date), avrese- och destinationsort (City-Pair), flygbolag (Airline-Id), etc. finns lagrade här.

• Filen har ett utseende som du ser i nedanstående bild.

Kol Fält Format 01 Reserved 02-06 Flight-Date mm/dd 07-13 City-Pair xxx-xxx 14-15 Airline-ID xx 16-19 Flight-Number nnnn 20 Class-of-Travel x 22-25 Mileage nnnnn 26-80 Filler

• Filen FREQFILE finns i mappen C:\COBOLKURS\DATA.

• Lokalisera filen, notera namnet och bekanta dig med innehållet.

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-4

Övning 2 – Frequent Flyer Program

I denna uppgift kommer du att skriva ett program som skapar en rapport från information i resefilen.

• Skriv ett program, FREQPGM, som läser samtliga poster i filen FREQFILE och skriver en rapport.

• Rapporten skall ha följande utseende:

Frequent Flyer Report Date Id Fl# Cl C-Pair Mileage 01/07 01 0222 Y DFW-ATL 731 01/10 02 0322 Y LAS-DFW 1 056 01/11 07 0351 Y BNA-DFW 631 . . . . . . . . . . 02/23 04 0633 C SXM-DFW 2 339 02/24 05 0730 Y RDU-DCA 227 03/10 07 0049 Y DFW-LAX 1 235 03/16 12 0495 C SJU-SXM 192 . . . . . . Total Mileage nn nnn Page 1

FREQFILE

FREQPGM

FREQLIST

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-5

Övning 3 – Bonus Report

• Komplettera ditt program så att rapporten kommer att ha följande utseende:

Frequent Flyer Report Date Id Fl# Cl C-Pair Mileage Inc Bonus 01/07 01 0222 Y DFW-ATL 731 731 02/11 03 1609 Y ATL-BNA 214 500 02/21 07 0351 Y BNA-DFW 631 631 . . . . . . . . . . 03/03 02 0769 C SXM-DFW 227 500 04/03 01 1263 Y RDU-DFW 1 061 1 061 04/10 07 0049 Y DFW-LAX 1 235 1 235 05/15 11 0428 C LAX-DFW 1 235 1 544 . . . . . . Total Mileage mm mmm nn nnn Page 1 End of Report

• Som Du ser så har det tillkommit en kolumn, Inc Bonus. För varje resa så skall en extra bonus tillkomma enligt följande regler:

o Samtliga klasser skall alltid få minst 500 miles när reslängden är lägre än 500, men ingen ytterligare bonus skall då tillkomma.

o Turistklass, ’Y’, skall inte ha någon extra bonus.

o Business Class, ’C’ skall erhålla 125% på aktuell reslängd.

o First Class, ’F’ skall erhålla 150% på aktuell reslängd.

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-6

Övning 4 – Frequent Flyer Mileage

I denna uppgift så kommer du att skapa en ny indexerad fil som skall fyllas med data, så att du från denna kan hämta reseavstånd (Mileage) när du senare skall skapa din rapport.

• Du skall skriva ett program som skapar en indexerad fil.

• Innehållet till filen finns mappen C:\COBOLKURS\DATA och innehåller reseavstånd för olika destinationer. Kontrollera och notera namnet.

• Filen antas vara osorterad, varför du först skall sortera filen till en ny fil, FREQMILS.TXT. Sorteringsbegreppet skall vara City-Pair.

• Den indexerad filen skall ha City-Pair som primärnyckel. Namnet på den skapade filen skall vara FREQMILE.NDX

• Filen har ett utseende som liknar denna:

Kol Fält Format 01-07 City-Pair xxx-xxx 08 Filler x 09-13 Mileage nnnnn 14-80 Filler x

• Innehållet ser du delar av här:

AKL-HNL/04406 AKL-MEL/01636 AKL-NAN/01341 AKL-PPT/02544 AKL-SYD/01343 . . . DFW-DEN/00645 DFW-DSM/00624 DFW-DTW/00987 DFW-ELP/00553 . . . SYD-NLK/01043 YYZ-DFW/01199 YYZ-LGA/00356 YYZ-ORD/00437

• Notera att filen bara innehåller information om flygväg i ena riktningen, t.ex DFW-DSM, men FREQFILE-filen kan mycket väl innehålla information om en resa gjord i andra riktningen.

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-7

Övning 5 – Mileage File

• Komplettera ditt tidigare program så att det hämtar reseavståndet från den nyligen skapade filen, FREQMILE.NDX, och inte från posterna i filen FREQFILE.

FREQMILE

FREQFILE

FREQPGM

Mileage ?

FREQLIST

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-8

Övning 6 – Date-and-Day Program

I den här uppgiften skall du skriva ett program som skall kunna skapa datum i olika format. Programmet skall kunna anropas med en parameter som beskriver i vilket format datumet skall levereras.

• Skriv ett program, FREQDATE, som skall kunna anropas som ett subprogram, där du i anropet skall kunna ange att det returnerade datumet skall vara i något av nedanstående format.

DATE=S ( 4/4, 200x ) DATE=M ( April 4, 200x ) DATE=L ( Tuesday, April 4, 200x, at hh:mm )

• Programmet skall konstrueras så att det består av ett ”huvudprogram” som

analyserar att anropsparametern är korrekt. Sedan skall de olika datumformaten konstrueras av ”inbakade” program i samma laddmodul/källkod.

• Lämpligen skapar du ett huvudprogram som innehåller enskilda program för

att skapa de olika datumformaten. Du behöver ju även ett ”hjälp-program” som beräknar framtida datum.

• Bestäm själv formatet för interna anropsparametrar etc. Datum som programmet skall returnera är dagens datum samt datum om 30 dagar.

• Komplettera sedan huvudprogrammet så att det kan anropas med en parameter vid exekveringen (DATE=S/DATE=M/DATE=L). Programmet skall även skriva ut ett meddelande om exekveringsparameter utelämnats eller är felaktig och avslutas med lämplig returkod.

• Uppdatera programmet, så att rapporten får ett utseende som liknar denna:

FREQDATE

Exit Program

Datshort

Datmed

Datlong

Datnext

FREQPGM

Call Program Using

Parm1, Parm2,. .

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-9

Frequent Flyer Report Printed : Monday, March 3, 200x, at hh:mm Valid until : Friday, April 7, 200x Date Id Fl# Cl C-Pair Mileage Inc Bonus . . . . . . . . . . . . . . . . . . . . . Total Mileage mm mmm nn nnn Page 1 End of Report

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-10

Övning 8 – Airline ID

• Komplettera rapporten så att den skriver ut namnet på flygbolaget. Detta namn finns i en indexerad fil i mappen C:\COBOLKURS\DATA. Airline-Id är nyckel.

• Filen har följande utseende:

Kol Fält Format 01-02 Airline-Id nn 03 Filler x 04-29 Airline-Name xxxx…xxx (25) 30-80 Filler x

• Det kan vara lämpligt att läsa in denna fil i en intern COBOL-tabell och söka i denna för att hämta Airline-Name.

• Räkna med att maxantalet flygbolag är 25.

COBOL från grunden Övningar II

© 2015 MONITOR IT-utbildning, Cobolskolan Sverige, www.cobolskolan.se B2-11

Övning 9 – Mileage Table, sort, pekare

I denna uppgift så kommer du skapa en ny version av programmet FREQMILE.

• Programmet FREQMIL2 skall använda samma fil som användes för att skapa filen FREQMILE.NDX, för fylla en intern COBOL-tabell med data från filen samt kunna göra sökning i tabellen.

• Filen antas vara osorterad och programmet skall gör en COBOL internsort av filen innan tabellen fylls med data. Nyckeln är som tidigare City-Pair.

• Utrymme för tabellen skulle i ”icke-Windows”-miljö kunna allokeras dynamiskt m.h.a Cobol Language Environment ”callable services”. I vår miljö antar vi att tabellen kan innehålla maximalt 500 element.

• Programmet FREQPGM2 skall anropa FREQMIL2 med begäran om sökning av visst City-Pair samt med en pekare, som detta program skall peka på den sökta posten i tabellen vid lyckad sökning.

• Om sökningen misslyckas skall pekaren ha värdet Null.

FREQMILE FREQMIL2 FREQPGM2

CALL Pgmnamn Using City-Pair,Postpekare

Postpekare

Sort

Postpekare