MainframeSupports
tip uge 3/2008:

Jeg har programmeret i COBOL i mange år, men først for nyligt fik jeg brug for samme funktionalitet i COBOL, som stilles til rådighed af funktionerne INDEX i PL/I, POS i REXX og POSSTR i SQL. Nu om dage findes der faktisk funktioner i COBOL, men ikke nogen der ligner de netop nævnte funktioner. Jeg måtte derfor søge hjælp hos andre garvede COBOL programmører, som henviste mig til INSPECT statementet.

Nu er COBOL manualens beskrivelser af diverse statements ikke verdens bedste, så vi måtte finde et konkret eksempel på anvendelsen, før den var hjemme. Jeg håber dette tip kan spare dig for de frustrationer, jeg var ude i. Bare det at finde ud af, at INSPECT er det statement i COBOL, der kan hjælpe, er i sig selv en bedrift, hvis man ikke lige ved det. Sådan her gør du:

01 needle PIC X(5).
01 haystack PIC X(50).
01 needlePos PIC S9(9) BINARY.

MOVE 'COBOL' TO needle
MOVE 'ITISNOTEASYTOCODEINDEXORPOSORPOSSTRINCOBOLIDOTHINK' TO haystack

MOVE 1 TO needlePos
INSPECT haystack TALLYING needlePos FOR CHARACTERS BEFORE needle

IF needlePos > LENGTH OF haystack
  DISPLAY 'NEEDLE ' needle ' NOT FOUND IN HAYSTACK ' haystack
ELSE
  DISPLAY 'NEEDLE ' needle ' FOUND IN POSITION ' needlePos
END-IF

INSPECT optæller antallet af tegn i HAYSTACK, der findes før den første forekomst af NEEDLE og adderer antallet til NEEDLEPOS. Derfor sættes NEEDLEPOS til 1 før INSPECT. I modsætning til INDEX/POS/POSSTR, så ender NEEDLEPOS med at være antal bytes i HAYSTACK plus 1, hvis NEEDLE ikke findes i HAYSTACK. I øvrigt kan INSPECT en hel masse andre ting end at fungere som scanner.

Forrige danske tip        Last tip in english        Tip oversigten