MainframeSupports
tip uge 3/2000:

Når man bruger ISPF-paneler er der et utal af muligheder for at validere indholdet af input-variablene. Det kniber dog med at finde ud af, om en variabel indeholder et bestemt tegn (eller flere). Men det er der også råd for.

Der findes nemlig en funktion, man kan benytte i et assignment statement kaldet TRUNC. TRUNC tager en variabel som input efterfulgt af en numerisk værdi eller et tegn i apostroffer. Eksempelvis vil &JENS = TRUNC(&KURT,2) resultere i, at &JENS kommer til at indeholde de 2 første tegn i &KURT, mens &LISE = TRUNC(&INGE, '*') vil resultere i, at &LISE kommer til at indeholde alle tegn i &INGE ind til den første '*'. '*' kommer altså ikke med i &LISE. Der er visse begrænsninger i brugen af TRUNC, som du kan læse mere om i ISPF-manualerne.

For de fleste ISPF-hajer er der ind til nu nok ikke noget nyt under solen. Lad os derfor antage, at vi skal undersøge, om tegnene '%' og/eller '_' indgår i en variabel. Det kan man ikke umiddelbart undersøge i sit ISPF-panel, men så kan man da heldigvis bruge TRUNC. I følgende eksempel skal vi finde ud af om &FINDSTR indeholder '%' eller '_':

&NOPCTSTR = TRUNC(&FINDSTR, '%')
&NOUSCSTR = TRUNC(&FINDSTR, '_')
IF(&NOPCTSTR = &FINDSTR & &NOUSCSTR = &FINDSTR)
  /* Så er der hverken '%' eller '_' i &FINDSTR */
ELSE
  /* Der er enten '%' eller '_' eller begge i &FINDSTR */

Læg mærke til, at man ikke kan skrive IF(TRUNC(&FINDSTR, '*') = &FINDSTR ...), da TRUNC kun kan benyttes i et assignment statement. Derfor er man nødt til at lave sig en hjælpevariabel. Efter et kald til TRUNC vil den særlige ISPF-variabel .TRAIL indeholde resten af den trunkerede værdi. I det første eksempel med &KURT vil .TRAIL indeholde resten af &KURT fra og med det tredie tegn. I eksemplet med &INGE vil .TRAIL indeholde alle tegn efter den første '*'.

Sidste uges tip        Tip oversigten