1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
|
/* REXX */
/*==================================================================*/
/* MAJPDS : remplacement d'une chaine de caractères par une autre */
/* dans un pds dont le nom est saisi sur panel CLIST */
/* entre colonnes saisies en parametre */
/*==================================================================*/
INIT:
"ALTLIB ACTIVATE APPLICATION(CLIST) DATASET('TSUS721.SCT.REXX.PROGS')"
"ISPEXEC LIBDEF ISPPLIB DATASET ID('TSUS721.SCT.REXX.PANEL')"
"ISPEXEC LIBDEF ISPSLIB DATASET ID('TSUS721.SCT.REXX.PROGS')"
"ISPEXEC LIBDEF ISPMLIB DATASET ID('TSUS721.SCT.REXX.MESSG')"
TRACE O
PROF NOPREF
TSOUSER = USERID()
ZDATE=SUBSTR(DATE(S),7,2)!!'-',
!!SUBSTR(DATE(S),5,2)!!'-',
!!SUBSTR(DATE(S),1,4)
OUKIFO ='DSNM' /* Au départ, le curseur est sur le DSN */
MAIN:
DO UNTIL STRIP(C) = 'X'
ERREUR = 0
ADDRESS ISPEXEC 'DISPLAY PANEL(MAJPDS) CURSOR(' OUKIFO
IF RC > 0 THEN CALL BYEBYE /* SI PF3 OU PF4 : EXIT LOOP */
CALL CONTROLES
IF C='V' & ERREUR = 0 THEN DO
CALL ALLOCATE_FILES
END
C=' '
END
BYEBYE:
"ALTLIB DEACTIVATE APPLICATION(CLIST)"
"ISPEXEC LIBDEF ISPPLIB"
"ISPEXEC LIBDEF ISPSLIB"
"ISPEXEC LIBDEF ISPMLIB"
EXIT
CONTROLES:
OUKIFO ='C'
IF STRIP(DSNM) = '' THEN DO
ERREUR = 1
OUKIFO ='DSNM'
ADDRESS ISPEXEC 'SETMSG MSG(MJPE001)' /* obligatoire */
END
ELSE DO
RC=SYSDSN("'"STRIP(DSNM)"'")
IF RC<>'OK' THEN DO
ERREUR = 1
OUKIFO ='DSNM'
ADDRESS ISPEXEC 'SETMSG MSG(MJPE002)' /* dsn non trouve */
END
END
IF ERREUR = 0,
& STRIP(CH0) = '' THEN DO
ERREUR = 1
OUKIFO ='CH0'
ADDRESS ISPEXEC 'SETMSG MSG(MJPE001)' /* obligatoire */
END
IF ERREUR = 0,
& STRIP(CH1) = '' THEN DO
ERREUR = 1
OUKIFO ='CH1'
ADDRESS ISPEXEC 'SETMSG MSG(MJPE001)' /* obligatoire */
END
IF STRIP(CO0) = '' THEN CO0=001
IF STRIP(CO1) = '' THEN CO1=080
IF ERREUR = 0,
& DATATYPE(CO0)<>'NUM' THEN DO
ERREUR = 1
OUKIFO ='CO0'
ADDRESS ISPEXEC 'SETMSG MSG(MJPE003)' /* non numerique */
END
IF ERREUR = 0,
& DATATYPE(CO1)<>'NUM' THEN DO
ERREUR = 1
OUKIFO ='CO1'
ADDRESS ISPEXEC 'SETMSG MSG(MJPE003)' /* non numerique */
END
IF ERREUR = 0,
& CO1 < CO0 THEN DO
ERREUR = 1
OUKIFO ='CO0'
ADDRESS ISPEXEC 'SETMSG MSG(MJPE004)' /* mini > maxi ! */
END
IF ERREUR = 0,
& LENGTH(CH0) > CO1-CO0+1 THEN DO
ERREUR = 1
OUKIFO ='CO0'
ADDRESS ISPEXEC 'SETMSG MSG(MJPE005)' /* impossible */
END
RETURN
ALLOCATE_FILES:
/* FICHIER RAPPORT EN SORTIE */
NBMBRS = 0
"ALLOC FI(XXOUT) DA('TSUS721.MAJPDS.PRINT') MOD REUSE LRECL(133)"
IF RC ^= 0 THEN DO
SAY 'ERR002 PROBLEME ALLOCATION XXOUT' RC
EXIT 0
END
RECOUT.1=Insert( '-', '', 1, 131, '-' )
RECOUT.2="---" ZDATE "-" TIME(N),
"--- Recherche de la chaine " CH0 " dans " DSNM,
" entre les colonnes " CO0 " et " CO1
RECOUT.3=Insert( '-', '', 1, 131, '-' )
RECOUT.0=3
"EXECIO" RECOUT.0 "DISKW XXOUT (STEM RECOUT."
/* PDS A EXAMINER */
NBFND=0
"ISPEXEC LMINIT DATAID(DATAID) DATASET('"DSNM"') ENQ(SHR)"
IF RC > 0 THEN RETURN 0
"ISPEXEC LMOPEN DATAID("DATAID")"
IF RC > 0 THEN DO
"ISPEXEC LMFREE DATAID("DATAID")"
RETURN 0
END
MEMNAME = ''
"ISPEXEC LMMLIST DATAID("DATAID") OPTION(LIST) MEMBER(MEMNAME)" ,
"PATTERN(*)"
DO WHILE RC = 0
CALL CHK_UPD_MBR
"ISPEXEC LMMLIST DATAID("DATAID") OPTION(LIST) MEMBER(MEMNAME)" ,
"PATTERN(*)"
END
"ISPEXEC LMCLOSE DATAID("DATAID")"
IF RC > 0 THEN DO
"ISPEXEC LMFREE DATAID("DATAID")"
RETURN 0
END
"ISPEXEC LMFREE DATAID("DATAID")"
/* */
RECOUT.1="------------------------------------------------"
/* RECOUT.2="--- MEMBRES CONSULTES :" NBMBRS - 6 */
RECOUT.2="--- MEMBRES CONSULTES :" NBMBRS
RECOUT.3="--- DONT CONTENANT LA CHAINE '" CH0 "' :" NBFND
RECOUT.4="------------------------------------------------"
RECOUT.0=4
"EXECIO" RECOUT.0 "DISKW XXOUT (STEM RECOUT."
"EXECIO 0 DISKW XXOUT (FINIS"
"FREE F(XXOUT)"
RETURN
CHK_UPD_MBR:
SAVERC=0
MEMNAME=STRIP(MEMNAME)
HDR=1
RECIN.0=0
NBMBRS = NBMBRS + 1
SAY "MEMBER="DSNM"("MEMNAME")"
"ALLOC F(XXIN) DS('"DSNM"("MEMNAME")') OLD REUSE"
"EXECIO * DISKR XXIN (STEM RECIN. FINIS"
FND=0
DO RECID = 1 TO RECIN.0
/* 1ere position de la chaine dans l'enreg lu */
DEB=POS(CH0,RECIN.RECID)
/* position a modifier compte tenu des colonnes en parametre */
RECUPD=SUBSTR(RECIN.RECID,CO0,CO1+1-CO0)
DB1=CO0+POS(CH0,RECUPD)-1
IF DB1 >= CO0,
& DB1 <= CO1 THEN DO
IF FND=0 THEN DO
FND=1
NBFND=NBFND+1
END
CALL REPLACE_STR
IF HDR = 1 THEN DO
RECOUT.1=Insert( '-', '', 1, 50, '-' )
RECOUT.2="LLL " MEMNAME " CONTIENT <" CH0 "> LLL"
RECOUT.0=2
"EXECIO" RECOUT.0 "DISKW XXOUT (STEM RECOUT."
HDR=0
END
VLG=LENGTH(RECID)
VED=INSERT('0',RECID,,9-VLG,0)
RECOUT.1 = 'REC-' !! VED !! ' ' !! RECIN.RECID
RECOUT.0=1
"EXECIO" RECOUT.0 "DISKW XXOUT (STEM RECOUT."
END
END
/* "EXECIO * DISKW XXIN (STEM RECIN. FINIS" */
"EXECIO" RECIN.0 "DISKW XXIN (STEM RECIN. FINIS"
"FREE F(XXIN)"
RETURN
REPLACE_STR:
/* SAY MEMNAME ' ligne ' RECID 'avant : ' RECIN.RECID */
DO UNTIL DB1=0
RECUPD=LEFT(RECIN.RECID,DB1-1)!!CH1!!SUBSTR(RECIN.RECID,DB1+LENGTH(CH0))
RECIN.RECID=RECUPD
RECUPD=SUBSTR(RECIN.RECID,CO0,CO1+1-CO0)
DB1=CO0+POS(CH0,RECUPD)-1
/* Si au dela des colonnes choisies, on sort de la boucle */
IF DB1 > CO1 ! DB1 < CO0 THEN DB1=0
END
/* SAY MEMNAME ' ligne ' RECID 'apres : ' RECIN.RECID */
RETURN |
Partager