Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1357 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  REXX vers UNIX

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

REXX vers UNIX

n°1653730
incinerato​r
Posté le 06-12-2007 à 12:30:06  profilanswer
 

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
 

mood
Publicité
Posté le 06-12-2007 à 12:30:06  profilanswer
 

n°1653799
Elmoricq
Modérateur
Posté le 06-12-2007 à 13:46:30  profilanswer
 

Je te soutiens. Go, go, go !  [:dion]

n°1654731
incinerato​r
Posté le 07-12-2007 à 17:34:43  profilanswer
 

hhhhhhhhhhhhhhh Elmoricq, mais je te remercie car avec ton go ,go ,go j'ai pu trouver la solution "hamedoulahe"
..............................................................

n°1657539
aigles
Posté le 13-12-2007 à 09:45:55  profilanswer
 

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  
      . . . .
   END


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  
      . . . .                
    END


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,' ','(')                  
       NOM = TRANSLATE(NOM,' ',')')  


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        
              "EXECIO 1 DISKW OUT ("

                                   
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\(/ {
 
   NOM = $0;
   gsub(/[()]/, " ", NOM);
 
   n = split(NOM, L);
   for (i=4; i<=n; i++) L[3] = L[3] (L[3] != "" ? " " : "" ) L[i];
 
   if (L[1] == 1) {
      L[1] = L[2];
      L[2] = L[3];
      gsub(/ /, "", L[2]);
   }
 
   L[2] = sprintf("%-30.30s", L[2]);
 
   getline;
   getline;
 
   COMP = $0;
   gsub(/[()]/, " ", COMP);
 
   n = split(COMP, M);
   for (i=4; i<=n; i++) M[3] = M[3] (M[3] != "" ? " " : "" ) M[i];
 
   M[2] = sprintf("%-8.8s", M[2]);
 
   if (M[2] > 0) {
     print L[2] " NOMBRE DE MSG : " M[2];
   }
   next;
}


Pour l'exécuter :

awk -f rexx.awk IN > OUT

n°1662928
incinerato​r
Posté le 25-12-2007 à 18:35:28  profilanswer
 

merci bcp  aigles


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  REXX vers UNIX

 

Sujets relatifs
[MySql] Split d'un champ vers un autre[C++] Portage de Visual C++ 2005 vers Eclipse CDT
Redirection dans Tomcat vers un autre siteMigration PostGre SQL vers MySQL
deplacer n-1 fichiers vers un autre repertoireTransformation TAR vers ZIP
[J2ME]Transfert jeu java vers portableStdou redirigé vers un fichier mais quand meme affiché sur la console?
Créer un texte dont chaque mot pointe vers une note. 
Plus de sujets relatifs à : REXX vers UNIX


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR