7.9 Meer over unstring

Voor de volgende mogelijkheden van de unstring-opdracht nemen we het veld datum als voorbeeld. Dit veld van tien posities bevat linksaangesloten een datum. De volgorde is dag, maand, jaar. Tussen de onderdelen staat een streepje (-) of een schuine streep (/). De dag en de maand kunnen uit 1 of uit 2 cijfers bestaan. Het jaar is altijd vier cijfers. Voorbeelden (_ betekent spatie): 7-2-1956__, 9-10-1989_, 12/12/1999. Het veld datum moet gesplitst worden in dag en mnd en jaar. Bovendien willen we uitzoeken welke scheidingstekens tussen dag en mnd en tussen mnd en jaar zijn gebruikt.

01 datum      pic x(10).
01 dag        pic 99.
01 mnd        pic 99.
01 jaar       pic 9999.
01 scheiding1 pic x.
01 scheiding2 pic x.

    unstring datum 
        delimited by "-" or "/" or space
    into 
        dag delimiter in scheiding1
        mnd delimiter in scheiding2
        jaar
  

onthoud

Achter delimited by kunnen we een reeks scheidingen vermelden, met het woordje or ertussen. Elk van de genoemde tekens geldt als mogelijke scheiding.

De scheiding kunnen we per veld opslaan in een alfanumeriek veld. Als er geen scheiding is, bijvoorbeeld omdat het einde van het veld is bereikt, dan wordt de variabele na delimiter in gevuld met spaties. Let goed op het verschil tussen delimited by en delimiter in. Delimited by geeft de begrenzing of begrenzingen aan.

onthoud

Na delimiter in komt een variabele waarin de gevonden begrenzing wordt opgeborgen.

Nu gaan we het iets ingewikkelder maken. Stel dat het is toegestaan om twee streepjes te schrijven als de ruimte dat toelaat. Het veld datum kan dan ook nog de volgende inhoud hebben: 4--11-1978, 6--7--1993. Als we de bovenstaande unstring-opdracht gebruiken, dan vindt de computer na het eerste scheidingsteken opnieuw een scheidingsteken. Dat heeft tot gevolg dat er voor het tweede veld (mnd) geen tekens zijn geselecteerd. Het veld krijgt dan spaties als inhoud als het alfanumeriek is, of nullen als het numeriek is (zoals hier). Dat is niet de bedoeling. We willen tegen de computer zeggen: de scheiding is één of meer streepjes. Dat kan door all toe te voegen:

    unstring datum 
        delimited by all "-" or "/" or space
    into 
        dag delimiter in scheiding1
        mnd delimiter in scheiding2
        jaar
  

Door all "-" te schrijven beschouwt de computer twee of meer streepjes als één scheiding. In het veld na delimiter in plaatst hij één streepje. Het gebruik van all kan heel handig zijn als we een zin hebben waarbij tussen de woorden een of meer spaties staan. We geven dan op: delimited by all space. Elk groepje spaties telt dan als één scheiding. Delimited by space (zonder all) betekent: de scheiding is slechts één teken lang.

omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo