/* REXX ------------------------------------------------------------- */ /* Zerlegen der mit PRINT und LIST gespeicherten Datei */ /* 'userid.SPF1.LIST' aus dem Lehrgang 16H82 / 16H87 */ /* */ /* Die mit <<< gekennzeichneten Zeilen muessen ggf geaendert werden. */ /* */ /* (c) N.Haas, 6/2001 */ /* ------------------------------------------------------------------ */ /* Name der Datei, die zerlegt werden soll: ------------------------- */ dsn_1 = "'"USERID()".SPF4.LIST'" /* <<< */ /* Name des PDS, in welchem die Member angelegt werden sollen: ------ */ dsn_2 = "'"USERID()".TEST.PDS'" /* <<< */ /* Plausi, existiert die Datei 2 ? ---------------------------------- */ sysdsn = SYSDSN(dsn_2) IF SYSDSN = 'OK' THEN DO /* Plausi, ist das auch ein PDS ? -------------------------------- */ dummy = LISTDSI(dsn_2) IF sysdsorg /= 'PO' THEN DO sms = 'DSORG error!' sml = 'Dataset' dsn_2 'is not PO, but' sysdsorg'.' "ISPEXEC SETMSG MSG(issm003)" EXIT 8 END END ELSE DO /* Datei 2 existiert nicht, also anlegen ------------------------- */ "ALLOC DD(dd2) DSN("dsn_2") DSORG(PO) RECFM(F,B)", "SPACE(50,100) TRACKS DIR(100) LRECL(80) BLKSIZE(0)", "MGMTCLAS(TESTSTD) STORCLAS(STANDARD)" /* <<< */ IF rc <> 0 THEN DO sms = 'Allocation failed!' sml = 'Error while allocating 'dsn_2'.' "ISPEXEC SETMSG MSG(issm003)" EXIT 8 END "FREE DD(dd2)" END /* Einlesen Datei 1 ------------------------------------------------- */ "ALLOC DD(dd1) DSN("dsn_1") SHR REUSE" "EXECIO * DISKR dd1 (FINIS STEM line.)" "FREE DD(dd1)" /* Init ------------------------------------------------------------- */ member = '' /* Membername */ member_alt = '' /* Membername (alt) */ m_line. = '' /* Memberzeilen */ m_cntr = 0 /* Counter fuer Memberzeilen */ skip_lines = 0 /* zu ueberspringende Zeilen */ /* Alle Zeilen durchlesen ------------------------------------------- */ DO i = 1 TO line.0 IF LEFT(line.i, 17) = '1 DATASET:' THEN NOP /* auslassen */ ELSE DO IF LEFT(line.i, 16) = ' MEMBER:' THEN DO member = STRIP(WORD(line.i,2)) IF member /= member_alt THEN DO IF member_alt /= '' THEN CALL Wegschreiben DROP m_line. member_alt = member m_cntr = 0 END skip_lines = 4 END ELSE DO IF member_alt /= '' THEN DO IF skip_lines = 0 THEN DO IF LEFT(line.i, 6) /= ' START' THEN DO m_cntr = m_cntr + 1 m_line.m_cntr = SUBSTR(line.i,8,80) END ELSE skip_lines = 2 END ELSE skip_lines = skip_lines - 1 END END END END /* Letztes Member noch wegschreiben --------------------------------- */ IF member_alt /= '' THEN CALL Wegschreiben EXIT /* ================================================================== */ /* Wegschreiben des aktuellen Members ------------------------------- */ Wegschreiben: dsn = STRIP(dsn_2,"T","'") || "("member_alt")'" /* <<< || oder !! */ SAY "Writeing" dsn "ALLOC DD(dd2) DSN("dsn") SHR REUSE" "EXECIO" m_cntr "DISKW dd2 (FINIS STEM m_line.)" "FREE DD(dd2)" RETURN