D o m i n i q u e   G u e b e y    J u n g l e          AS/400 - iSeries

Trucs et petits algorithmes

Sommaire

Décallage en RPG

     H
      * Décalage à gauche d'une chaîne de caractères commençant par
      * des blancs ou zéros. Ce module n'est pas optimisé pour de
      * TRES longues chaînes de caractères
     E                    TDG        32  1
     E                    UDG        32  1
      * WLONG doit être égal à la dimension des tableaux TDG & UDG
     I            DS
     I I            32                        1   60WLONG
      * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     C           *ENTRY    PLIST
     C                     PARM           TDG
      *
     C           1         DO   WLONG     I       60
      * Cherche premier caractère non égal à blanc ou zéro
     C           TDG,I     IFNE *BLANK
     C           TDG,I     ANDNE'0'
      *        Trouvé (inutile si premier car. non nul)
     C           I         IFNE 1
      *        UDG est censé être à blanc au départ (ainsi la partie
      *        finale qu'on déplace se trouve à blanc)
     C                     MOVEATDG,I     UDG
     C                     MOVEAUDG       TDG
     C                     ENDIF
      *
     C                     LEAVE
     C                     ENDIF
      *
     C                     ENDDO
      *
     C                     RETRN

Décorticage d’un fichier CSV recu sur l’AS/400

Application en RPG 3 imposé. On en trouve encore. J’ai suggéré l’utilisation d’une commande d’importation ; pour des raisons inconnues, ce fut repoussé.

Bien sûr, une ligne de REXX peut faire ça ; mais des IBMistes de plus de vingt ans équarquillent les yeux en entendant ce nom.

Avec prise en compte de 3 zones numériques, toutes de 5 chiffres (champs 10, 13 et 14 dans cet exemple).

      * Informations d'abord mises dans les postes d'un tableau
     E                    TZ         32 32
     E                    T5          5  1
...
     C                     Z-ADD1         P1      20
     C                     Z-ADD0         P2      20
     C                     Z-ADD0         LG      20
     C                     Z-ADD0         NZ      20
     C                     CLEARTZ                  
      *
     C                     DO   *HIVAL              
      *                                             
     C                     MOVE *BLANK    T5
     C                     MOVE *BLANK    Z32    32
     C           ';'       SCAN FILLER:P1 P2             50
     C  N50      ' '       CHEKRFILLER    P2        
     C  N50                ADD  1         P2        
      *
     C                     ADD  1         NZ        
     C           P2        SUB  P1        LG         99
      *          N99 <=> LG=0 i.e. deux ";" côte à côte
     C           *IN99     IFEQ '1'                
     C           LG        SUBSTFILLER:P1 Z32      
      *          Zônes numériques
     C           NZ        IFEQ 10
     C           NZ        OREQ 13
     C           NZ        OREQ 14
     C           ' '       CHEKRZ32       P3      20
     C           6         SUB  P3        I       60 99
     C           *IN99     IFEQ '1'                    
     C                     MOVEAZ32       T5,I         
     C                     MOVEAT5        TZ,NZ        
     C                     ENDIF                       
      *          Zônes alpha.
     C                     ELSE                    
     C                     MOVELZ32       TZ,NZ    
     C                     ENDIF                   
     C                     ENDIF                    
      *
     C  N50                LEAVE                           
      *
     C           P2        ADD  1         P1
     C                      ENDDO            

Il y a mieux que QCMDEXC

The advantage of using the QCAPCMD versus QCMDEXC is that you can pass the error code parameter. The error code parameter allows you to check for any errors that can occur on the command.

fnewfile   if   e           k disk    usropn 
     dcommand          s             40    inz(' ') 
     dcmdlng           s             10i 0 inz(40) 
     docb              ds 
     d type                          10i 0 inz(0) 
     d DBCSdh                         1    inz('0') 
     d prompt                         1    inz('0') 
     d cmdsyntax                      1    inz('0') 
     d msgrtvkey                      4    inz(x'00000000') 
     d reserve1                       9    inz(x'000000000000000000') 
     docblength                      10i 0 inz(x'00000014') 
     docbfmt                          8    inz('CPOP0100') 
     dchgcmd                          1    inz(' ') 
     dlngchgcmd                      10i 0 inz(0) 
     dlngchgrtn                      10i 0 inz(0) 
     d/COPY QSYSINC/QRPGleSRC,QUSEC 
     d qused01                17    116 
     c                   eval      command = 'OVRDBF NEWFILE SHARE(*YES)' 
     c                   Z-ADD     116           QUSBprv 
     c                   call      'QCAPCMD' 
     c                   parm                    command 
     c                   parm                    cmdlng 
     c                   parm                    ocb 
     c                   parm                    ocblength 
     c                   parm                    ocbfmt 
     c                   parm                    chgcmd 
     c                   parm                    lngchgcmd 
     c                   parm                    lngchgrtn 
     c                   parm                    QUSEC 
     c     QUSBavl       ifgt      0 
     c     'Error on API'DSPLY 
     c     qusei         dsply 
     c                   end 
     c                   open      newfile 
     c     *loval        setll     fmt1 
     c                   read      fmt1                                   30 
     c     *in30         ifeq      '0' 
     c     fld1          dsply 
     c                   else 
     c     'No Records'  dsply 
     c                   end 
     c                   close     newfile 
     c                   eval      *INLR = '1' 

DDS for newfile:

                R FMT1                               
                  FLD1          10                   
                  FLD2          10                   
                K FLD1                               

DFU – avoir le listing des modifications/suppressions QPDZDTALOG

Il y a une option audit à modifier. Pour celà, passer par la création d’un programme DFU quelconqe (le fameux BIDON par ex.).


Cre : 02 sep 2010

A propos de ces pages / about these pages : http://www.dg77.net/about.htm
Cre : 02 sep 2010 - Gen : 2012-03-08-12:11:57,20