Sample UEB12C

Sample

Input: Data Set Name am Terminal verlangen (LISTDSI)                                 
- muss PO sein!
Member Name am Terminal verlangen (SYSDSN)
- muss existieren!
Suchtext am Terminal verlangen
Process: ???
Output: "Anzahl Members im " dataset":" nnn
"Anzahl untersuchte Zeilen im Member" member ":" nnn
suchtext "wurde " n "Mal gefunden"
"Zeile" Nummer der Zeile, wo der Text gefunden wurde
die Zeile mit dem gefundenen Text.
Die letzten zwei Meldungen müssen so oft ausgegeben werden,
wie der Text gefunden wurde

/* REXX UEB12C Copyright YCOS Yves Colliard Software 1990-2009 */
/* TRACE ?R  */
  /* einschalten des interaktiven Trace Modus */
  /* */
DO FOREVER
   SAY "Bitte Data Set Name eingeben"
   PARSE UPPER EXTERNAL dsname      /* Anfrage an der Konsole     */
   IF dsname = "" THEN
      SAY "Falsche Eingabe"
   ELSE DO
      totest = "'"strip(dsname)"'"
      dscd = LISTDSI(totest "DIRECTORY") /* LISTDSI des Data Sets */
      IF dscd = 0 THEN
         IF SYSDSORG = "PO" THEN
            LEAVE
         ELSE
            SAY "Kein Partitioned Data Set, DSORG:" SYSDSORG
      ELSE DO
                                    /* LISTDSI nicht erfolgreich  */
         SAY "Fehler, beim" dsname "Data Set"
         SAY "Reason Code" SYSREASON
         SAY SYSMSGLVL1
         SAY SYSMSGLVL2
      END
  /* */
   END
  /* */
END
  /* */
  /* */
DO FOREVER
   SAY "Bitte Member eingeben"
   PARSE UPPER EXTERNAL mbr         /* Anfrage an der Konsole     */
   IF mbr = "" THEN
      SAY "Falsche Eingabe"
   ELSE DO
      totest = "'"strip(dsname)"("strip(mbr)")'"
      dscd = SYSDSN(totest)
      IF dscd <> "OK" THEN DO
         SAY "Fehler, beim" tottest
         SAY dscd
      END
      ELSE
         LEAVE
  /* */
   END
  /* */
END
  /* */
  /* */
DO FOREVER
   SAY "Bitte Text eingeben"
   PARSE EXTERNAL suchtxt           /* Anfrage an der Konsole     */
   IF suchtxt = "" THEN
      SAY "Falsche Eingabe"
   ELSE
      LEAVE
  /* */
END
  /* */
/* */
resp = OUTTRAP(errycos.,"*","NOCONCAT")
/* */
ADDRESS TSO "FREE FI(INPFILE)"
/* */
ADDRESS TSO "ALLOC FI(INPFILE) DA("totest") SHR"
IF rc <> 0 THEN DO
   SAY "Error on ALLOC Input File" totest ", RC =" rc
   DO i=1 to errycos.0
      SAY errycos.i
   END
   EXIT
END
/* */
ADDRESS MVS "EXECIO * DISKR INPFILE (STEM line. FINIS"
ADDRESS TSO "FREE FI(INPFILE)"
/* */
totlifnd = 0
fndnum = 0
/* */
DO i=1 to line.0
   /* */
   wotxt = POS(suchtxt,line.i)
   /* */
   IF wotxt <> 0 THEN DO
      fndnum = fndnum + 1
      lin.fndnum = i
      txt.fndnum = line.i
   END
      /* */
END
/* */
SAY "Anzahl Members im" dsname ":" SYSMEMBERS
SAY "Anzahl untersuchten Zeilen im" mbr ":" line.0
SAY suchtxt "wurde" fndnum "Mal gefunden"
/* */
DO i=1 TO fndnum
   SAY "Zeile" lin.i
   SAY STRIP(txt.i,"T")
END
/* */