MainframeSupports
tip uge 48/2006:

Jeg har flere gange rost COBOL for at kunne mere end de fleste PL/I programmører tiltror COBOL. Jeg havde dog ikke fundet ud af, hvordan man i COBOL opnår samme funktion, som TITLE giver i PL/I. Jeg drillede en af mine kolleger, Per Jørgensen, med, at noget lignende kunne man altså ikke i COBOL. Men Per er en stædig mand, så han fandt et tip på internettet, som jeg straks videregiver.

Følgende program virker på den måde, at det læser en fil i FB format med LRECL=80 fra det DD navn, som angives i PARM= på EXEC kortet i JCL. Programmet startes f.eks. med en //MYDDNAME EXEC PGM=MYDDNAME,PARM='DDNAME01' og så vil det udskrive samtlige records fra DDNAME01 på SYSOUT forudsat, at du har allokeret noget til DD navn DDNAME01 med de angivne DCB oplysninger:

identification division.
program-id. myDDname.
environment division.
input-output section.
file-control.
    select ddName assign to ddName
    file status is ddNameStatus.
data division.
file section.
fd  ddName
    recording mode is f.
01  ddNameRec pic x(80).
working-storage section.
01  ddNameLen pic 9(4) binary.
01  ddNameStatus pic 9(2).
01  actualDDname pic x(8).
linkage section.
01  parm.
  02  parmL pic 9(4) binary.
  02  parmD pic x(100).
procedure division using parm.
    if parml > 0
      move parmD(1:parmL) to actualDDname
      call 'newDDname' using actualDDname ddName
    end-if
    open input ddName
    read ddName
    perform until not ddNameStatus = 0
      display ddNameRec
      read ddName
    end-perform
    close ddName
    goback.
identification division.
program-id. newDDname.
data division.
linkage Section.
01  ddName pic x(8).
01  fdArea pic x(48).
procedure division using ddName fdArea.
    move ddName to fdArea(41:8)
    goback.
end program newDDname.
end program myDDname.

Hele tricket består i at manipulere med de data, der findes på den adresse, som FD variablen ddName er allokeret til. Det kan man opnå på den angivne måde. Vær venligst opmærksom på, at tippet måske ikke virker på din installation, hvis det er en anden version af COBOL compileren, der er installeret der. Hvis tippet ikke virker, så står DD navnet i en anden position i FD variablen, og så er det bare om at finde den og bruge den i stedet.

Det er selvfølgelig ikke særligt fikst, at COBOL ikke har en funktion som TITLE i PL/I, så man i stedet skal ty til ovenstående metode, som er compiler version afhængig. Du skal derfor nøje overveje dit behov, før du kaster dig ud i brugen af metoden.

Bemærk i øvrigt brugen af et internt program i COBOL. Læg mærke til, hvor lidt du faktisk behøver at definere for, at det virker.

Forrige danske tip        Last tip in english        Tip oversigten