REXX vers UNIX - Shell/Batch - Programmation
Marsh Posté le 07-12-2007 à 17:34:43
hhhhhhhhhhhhhhh Elmoricq, mais je te remercie car avec ton go ,go ,go j'ai pu trouver la solution "hamedoulahe"
..............................................................
Marsh Posté le 13-12-2007 à 09:45:55
Voici quelques éléments d'explication du programme REXX.
"EXECIO * DISKR IN (STEM ENR. FINIS" |
Lecture du fichier IN dans le tableau ENR
La notation ENR.I est équivalante à la notation tableau ENR[I].
L'élément 0 contient le nombre d'éléments dans le tableau (hors 0).
DO I = 1 TO ENR.0 |
Boucle sur le traitement de toutes les lignes du fichier contenues dans le tableau ENR
ENR.I -> Ligne I du fichier.
IF POS('QUEUE(',ENR.I) > 0 THEN DO |
On teste la présence de la chaîne 'QUEUE(' dans la ligne en cours.
La fonction POS retourne la position de la chaîne (0 si non trouvée).
NOM = TRANSLATE(ENR.I,' ','(') |
La variable NOM reçoit la ligne en cours et l'on remplace les caractères '(' et ')' par des espaces.
PARSE VALUE NOM WITH L1 L2 L3 |
La variable NOM est décomposée en mots dans les variables L1 L2 et L3.
La variable L3 reçoit le 3eme mot et les suivants.
L2 = SPACE(L2,0) |
Tous les espaces contenus dans la variable L2 sont supprimés.
L2 = LEFT(L2,30) |
La variable L2 ne conserve que les 20 premiers caractères.
Si elle à une lonfueur inférieure à 20 on complete avec des espaces.
I = I + 2 |
La variable I est utilisé comme numéro de la ligne en cours.
On fait +2, I pointe maintenant deux lignes plus loin.
PUSH L2!!' NOMBRE DE MSG : '!!M2 |
On écrit sur le fichier sorte OUT la chaîne résultat de la concaténation de L2, ' NOMBRE DE MSG : ' et M2
Voici un équivalant (enfin presque, non testé) en awk :
/QUEUE\(/ { |
Pour l'exécuter :
awk -f rexx.awk IN > OUT |
Marsh Posté le 06-12-2007 à 12:30:06
Bonjour tout le monde j'ai besoin de votre aide SVP, j'ai un programme REXX que je souhaite le traduire en KSH :
le programme rexx est le suivant :
/* REXX */
/* LIST LA PROFONDEUR DES QUEUES */
/* ET EDIT UN LISTING POUR LE SUIVI SUR MQMG */
/*TRACE I*/
DROPBUF 0
CALL LIRE
CALL AFFICHE
EXIT RC
/********************************************************************/
LIRE:
"EXECIO * DISKR IN (STEM ENR. FINIS"
RETURN
/********************************************************************/
AFFICHE:
I = 0
NOM = ' '
COMP = ' '
DO I = 1 TO ENR.0
L2 = ' '
M2 = 0
IF POS('QUEUE(',ENR.I) > 0 THEN DO
NOM = TRANSLATE(ENR.I,' ','(')
NOM = TRANSLATE(NOM,' ',')')
PARSE VALUE NOM WITH L1 L2 L3
IF L1 = 1 THEN DO
L1 = L2
L2 = L3
L2 = SPACE(L2,0)
END
L2 = LEFT(L2,30)
I = I + 2
COMP = TRANSLATE(ENR.I,' ','(')
COMP = TRANSLATE(COMP,' ',')')
PARSE VALUE COMP WITH M1 M2 M3
M2 = RIGHT(M2,8)
IF M2 > 0 THEN DO
PUSH L2!!' NOMBRE DE MSG : '!!M2
"EXECIO 1 DISKW OUT ("
END
END
END
RETURN
/********************************************************************/
Merci de me soutenir sur ce sujet.
Merci d'avance