MainframeSupports
tip uge 35/2012:

Fornylig fik jeg brug for at opdele en masse records ved et bestemt ord i stedet for i en bestemt position. Ordet stod selvfølgelig ikke i samme position i hver record. Så kom jeg i tanke om SPLIT funktionen i ISPF EDIT. SPLIT kan heldigvis også bruges i en EDIT MACRO, og så fandt jeg på følgende REXX:

/* REXX */
ADDRESS ISREDIT
'MACRO (PARM) NOPROCESS'
'(USRSTATE) = USER_STATE'
'(LRECL) = LRECL'
CHANGES = 0
IF PARM <> ''
THEN DO
  DO WORDNO = 1 TO WORDS(PARM)
    THISWORD = WORD(PARM, WORDNO)
    'FIND "'THISWORD'" FIRST 2 'LRECL
    DO WHILE RC = 0
      'TSPLIT'
      CHANGES = CHANGES + 1
      'FIND "'THISWORD'" NEXT 2 'LRECL
    END
  END
END
'USER_STATE = (USRSTATE)'
IF CHANGES = 0
THEN
  SAY 'NONE OF THE WORDS 'PARM' FOUND'
ELSE
  SAY 'SPLIT ON 'PARM' SUCCESFUL IN 'CHANGES' LINES'
EXIT

Hvis du kalder programmet TXTSPLIT, så kan du for eksempel udføre kommandoen TXTSPLIT FROM WHERE, som vil dele alle records i din EDIT eller VIEW session først på alle forekomster af ordet FROM og derefter på alle forekomster af ordet WHERE. Det er da smart, især i betragtning af hvor lille programmet er.

Bemærk brugen af USER_STATE. Det er en feature i EDIT MACRO sproget, der gør det muligt at genskabe den oprindelige position i data og øvrige defaults, når EDIT MACRO'en er færdig. Især i denne EDIT MACRO er det en god ide, da du ellers vil stå i data, der hvor det sidste ord blev splittet, og det kan godt virke meget forvirrende.

Forrige danske tip        Last tip in english        Tip oversigten