Naar inhoud springen

Programmeren in COBOL/Bewerkingen/Werken met tekst

Uit Wikibooks

Programmeren in COBOL

Inhoudsopgave
  1. Inleiding Zeer goed ontwikkeld. Revisiedatum: 24 oktober 2007 (Oef Zeer goed ontwikkeld. Revisiedatum: 24 oktober 2007 )
  2. Berekeningen Zeer goed ontwikkeld. Revisiedatum: 22 oktober 2007 (Oef Redelijk ontwikkeld. Revisiedatum: 26 oktober 2007 )
  3. IF en lussen Zeer goed ontwikkeld. Revisiedatum: 26 oktober 2007 (Oef In ontwikkeling. Revisiedatum: 25 oktober 2007 )
  4. Deelprogramma's Zeer goed ontwikkeld. Revisiedatum: 21 oktober 2007 (Oef Nog vrijwel niets. Revisiedatum: 20 november 2007 )
  5. Werken met tekst In ontwikkeling. Revisiedatum: 21 oktober 2007 (Oef Nog vrijwel niets. Revisiedatum: 20 november 2007 )





In dit hoofdstuk worden de verschillende manieren uitgelegd om te werken met tekst.

ALPHABETIC

[bewerken]

Via ALPHABETIC kun je controleren of de inhoud van een veld alleen maar hoofdletters, kleine letters en spaties bevat. Je kunt dit in een programma als beveiliging inbouwen, zodat de gebruiker geen verkeerde informatie geeft. Als je bijvoorbeeld een naam vraagt, kun je controleren dat het geen getal is of rare tekens bevat.

COBOL-code: ALPHABETIC

       IDENTIFICATION DIVISION.
       PROGRAM-ID. Tekst.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 naam PIC X(10).

       PROCEDURE DIVISION.
       HOOFD.
           ACCEPT naam NO BEEP
           IF naam ALPHABETIC
             THEN DISPLAY "Naam is toegestaan"
             ELSE DISPLAY "Naam is niet toegestaan"
           END-IF
           STOP RUN.

Naast ALPHABETIC bestaat er ook nog ALPHABETIC-LOWER en ALPHABETIC-UPPER. ALPHABETIC-LOWER controleert of alles in kleine letters staat en UPPER controleert of alles in hoofdletters staat.

Tekens vervangen

[bewerken]

Tekens vervangen gaat via het INSPECT-statement maar er zijn twee manieren om dat statement te gebruiken. Via REPLACING en CONVERTING, zowel bij numerieke als bij alfanumerieke velden.

REPLACING

[bewerken]

REPLACING maakt het mogelijk om in een veld een teken te veranderen door een ander teken of een stukje tekst door een ander stukje tekst.

COBOL-code: Tekst vervangen

       IDENTIFICATION DIVISION.
       PROGRAM-ID. Tekst vervangen.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 tekst PIC xxxx VALUE "papa".

       PROCEDURE DIVISION.
       HOOFD.
           DISPLAY tekst
           INSPECT tekst REPLACING ALL "p" BY "m".
           DISPLAY tekst
           INSPECT tekst REPLACING ALL "ma" BY "do".
           DISPLAY tekst
           STOP RUN.
papa
mama
dodo

ALL betekent in dit geval dat alle p’s worden vervangen door m’s. Naast ALL, kan je ook FIRST en LEADING gebruiken. FIRST betekent dat alleen de eerste vervangen wordt, en LEADING vervangt alleen als het helemaal vooraan staat. Je kunt slechts één veld tegelijkertijd gebruiken. Wat je vervangt en waarmee je het vervangt, moeten een gelijke tekenlengte hebben. 2 tekens moeten altijd vervangen worden door 2 tekens. Ook is het mogelijk om andere velden en constanten te gebruiken, zoals REPLACING ALL tekst BY andertekst of REPLACING ALL ZERO BY quote.

CONVERTING

[bewerken]

Een stuk tekst omzetten naar allemaal hoofdletters, kan met op verschillende manieren. Het kan omslachtig met REPLACING: REPLACING ALL "a" by "A", REPLACING ALL "b" by "B" enzovoort. Efficiënter gaat het met het INSPECT-statement in combinatie met CONVERTING.

COBOL-code: Tekst vervangen

       IDENTIFICATION DIVISION.
       PROGRAM-ID. Tekst vervangen.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 tekst PIC xxxx VALUE "test".
       77 kleineletters PIC X(27) VALUE "abcdefghijklmnopqrstuvwxyz".
       77 hoofdletters  PIC X(27) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ".

       PROCEDURE DIVISION.
       HOOFD.
           DISPLAY tekst
           INSPECT tekst CONVERTING kleineletters TO hoofdletters
           DISPLAY tekst
           STOP RUN.
test
TEST

Wanneer je CONVERTING gebruikt, kijkt COBOL eerst naar het veld dat je wilt omzetten. Hij kijkt naar het eerst teken, in dit geval de letter t, en zoekt die vervolgens in het veld kleineletters. Als COBOL de letter heeft gevonden, onthoudt die de positie van die letter, in dit geval positie 20. Dan kijkt het naar hoofdletters en zoekt wat er op positie 20 staat, dus hoofdletter T. Dit proces wordt herhaald tot alle letters vervangen werden. Voor de rest gelden dezelfde regels als bij REPLACING.

Dit algoritme kan gebruikt worden om een tekst op eenvoudige manier te versleutelen met een geheime code.

COBOL-code: Caesarcijfer-rotatie3

ontcijfersleutel voor Caesar-rotatie3
       IDENTIFICATION DIVISION.
       PROGRAM-ID. Tekst vervangen.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 tekst PIC X(29)  VALUE "D I T I S Z E E R G E H E I M".
       77 gewone-tekst     PIC X(27) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
       77 caesar-rotatie3  PIC X(27) VALUE "XYZABCDEFGHIJKLMNOPQRSTUVW".

       PROCEDURE DIVISION.
       HOOFD.
           DISPLAY tekst
           INSPECT tekst CONVERTING gewone-tekst TO caesar-rotatie3
           DISPLAY tekst
           STOP RUN.
D I T I S Z E E R G E H E I M
A F Q F P W B B O D B E B F J

Tekst opslitsen met UNSTRING

[bewerken]
  Zie ook UNSTRING voor meer informatie.

Via UNSTRING kun je een alfanumeriek veld met tekst opsplitsen in kleinere velden.

COBOL-code: UNSTRING

       IDENTIFICATION DIVISION.
       PROGRAM-ID. tekstopslitsen.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77  datum PIC x(8).

       77  dag   PIC XX.
       77  maand PIC XX.
       77  jaar  PIC XXXX.

       PROCEDURE DIVISION.
       hoofd.
           DISPLAY "Geef een datum(ddmmjjjj)."
           ACCEPT datum NO BEEP
           UNSTRING datum
           INTO dag, maand, jaar 
           DISPLAY "Dag: " dag " Maand: " maand " Jaar: " jaar
           STOP RUN.

Dit programma leest een datum in volgens ddmmjjjj, wat betekent dat een datum als 21 april 2007 moet worden geschreven als 21042007. Uiteindelijk wordt de datum verdeeld over de velden dag, maand en jaar. Na UNSTRING moet het veld komen dat je wilt opsplitsen. Na INTO moeten dan de velden komen waar de opgesplitste tekst moet komen. Het aantal velden mag minder of meer zijn dan het aantal stukjes tekst dat ontstaat door de UNSTRING.

Geef een datum(ddmmjjjj).
21042007
Dag: 21 Maand: 04 Jaar: 2007

Mensen schrijven hun datums niet zoals 21042007 maar eerder als 21-04-2007. UNSTRING maakt het mogelijk om een tekst op te splitsen op basis van een bepaald teken in dit geval moet dat "-" zijn. Dit gebeurd als volgt.

COBOL-code: UNSTRING

           UNSTRING datum
           DELIMITED BY "-"
           INTO dag, maand, jaar 

DELIMITED geeft dus aan op basis van welk teken de tekst moet worden opgesplitst.

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.