Tables de séquence (séquence de tri et tests log.)

BoTTom |   
 
 Il est possible depuis la V2R30 d'avoir une notion de tri propre à un pays
  ou personnalisée.
 
 Cette fonction existait déja avec le mot-clé ALTSEQ (SDD) et utilisait
  des tables.
 
  Rappel sur la notion de table: 
 
  utilisée en conversion : le poids d'un caractère (sa valeur héxa) donne le
   déplacement à effectué dans la table pour trouver le caractère de
   remplacement.
 
   exemple avec "b" (val x'82') on se déplace de 130 octets (82 héxa = 130);
    donc en position 131 , et on trouve le caractère de remplacement.
   Si vous mettez en 131 ème position la valeur x'C2' ("B") il y aura une
    conversion minuscule / MAJUSCULE.
 
 utilisé en tri : la valeur héxa de remplacement est utilisée pour le tri.
                  Dans l'exmple ci dessus "b" aura comme valeur héxa x'C2'
                  (et non x'82') et sera classé entre x'C1' et x'C3'
                                                       "A"      "C"


|   
 Pour créer une table vous devez saisir son source héxa dans un fichier
 source (QTBLSRC/dft),chaque enregistrement source contenant 32 valeurs héxa
 
 Voici le source d'une table qui ne modifie rien: 
000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F
404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F
808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F
A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF
C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF
E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF
 
 Voici le source de QSYSTRNTBL (cvt min/MAJ)    :                 modifiés  
000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F
404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F
80C1C2C3C4C5C6C7C8C98A8B8C8D8E8F90D1D2D3D4D5D6D7D8D99A9B9C9D9E9F 81-89,91-99
A0A1E2E3E4E5E6E7E8E9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF A2-A9 
C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF
E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF


|   
 Depuis la V2R30 le système fait la différence (à la création) entre
   une table de conversion   CRTTBL ... TBLTYP(*CVT)
   une table séquence de tri CRTTBL ... TBLTYP(*SRTSEQ)
 
 Les tables de séquence peuvent être utilisées :
 
 - pour toute notion de tri (Index LF, OPNQRYF, SQL , API QLGSORT, ...)
 
 - pour toute comparaison : + sélection/ommission SDD
                            + sélection lors d'une requête(OPNQRYF,SQL,QM)
                            + COMP,RANGE,VALUES / fichiers écrans
                            + tests par pgm (IF,...)
                            + toute forme de jonction B de D.
                            + accès direct à un fichier (CHAIN,..)
 
 Une table de séquence peut être de deux types :
  + à poids unique (chaque caractère à un poids (val héxa) différent
     ==> e,E,é,è sont classés à suivre.
     ==> e <> é lors d'un test
  + à poids partagé (plusieurs caractères peuvent avoir le même poids)
     ==> e,E,é,è sont classés ENSEMBLE.
     ==> e = é,E,ê,è,... lors d'un test


|   
 
 Les tables de séquence standards sont fonction du langage en cours.
 
   valeur  *LANGIDSHR -> poids partagé
           *LANGIDUNQ -> poids unique
 
   la valeur par défaut étant donné par la valeur système QSRTSEQ 
      *HEX = séquence héxa (EBCDIC) comme aujourd'hui
      *LANGIDSHR
      *LANGIDUNQ
      -table qualifiée-
 
 la notion de langue étant précisée en même temps que la table ou renvoyant
   à la valeur système QLANGID (dft = FRA)
 
 le système utilise alors des tables se trouvant dans QSYS
 
    Qssscccct où sss est le type de jeu de caractère LA1 = Latin 1 (697)
                 cccc est le CCSID en héxa          0129 = 297
                 t    est le type de la table       U = poids unique
                                                    S = poids partagé
    QLA10129U , QLA10129S en france.


|   
 
 Utilisation de ces tables :
 
 au niveau du job :   CHGJOB SRTSEQ(  ) LANGID(  )
 
  donné par défaut par le profil CRTUSRPRF SRTSEQ( ) LANGID( )/dft = *SYSVAL
 
 au niveau des fichiers CRTPF/LF/DSPF STRSEQ(  ) LANGID(  )
 
                        - *SRC = indiqué dans le source(dft/comme avant)
                        - *JOB = la table du job qui crée
                        - *HEX,*LANGIDUNQ,*LANGIDSHR
                        - -table qualifiée-
 
Cette table est utilisée pour la création/maintenance des index
                         pour les sélections/omissions et jonctions
                         pour les COMP,RANGE,VALUES (DSPF)
 
 ATTENTION : si à l'ouverture de l'index,SRTSEQ du job <> SRTSEQ du fichier
 
              IL Y A CREATION D'UN INDEX TEMPORAIRE !!!
 


|   
 
utilisation lors de requêtes
 
   Paramètres SRTSEQ(  ) LANGID(  ) pour
 
              OPNQRYF
              STRSQL
              CRTQMQRY
              CRTSQLxxx
              WRKWRY
              lors de transfert de fichiers via PCS/400
 
    conséquences sur . ORDER BY (ou équivalent)    tri
                     . WHERE                       sélection
                     . GROUP BY                    groupage
                     . HAVING                      sélection sur le groupage
                     . UNION, UNION ALL            union
                     . DISTINCT                    test des enregs dupliqués
                     . BETWEEN, IN, LIKE           tests
                     . MIN, MAX                    fonctions récapitulatives
 
 


|   
 
utilisation par gpm :
 
 
RPG spécif H colonne 26 rien = table de séquence héxa (*HEX)
                        S = table fournie en fin de source
                        D = utilisation du paramètre SRTSEQ(  )
 
    La table est stockée "en dur" dans l'objet programme.
 
    conséquences sur . les tests (if, COMP, CAS, ...)
                     . le cycle (concordance et ruptures)
                     . SORTA,LOKUP, etc..
 
COBOL clause PROCESS
         ou ALPHABET (SPECIAL-NAMES) avec mot réservé "NLSSORT".
 
    conséquences sur . les tests (IF, EVALUATE, PERFORM UNTIL,...)
                     . SEARCH,START,...
 
 
 


|   
 
 ET ENFIN, si vous devez créer vos tables,le système vous propose de
   définir dynamiquement la table à partir d'un modéle
   (utilisable aussi pour visualiser une table existante)
 
                            Créer une table (CRTTBL)           
 
 Indiquez vos choix, puis appuyez sur ENTREE. 
 
 Nom de la table  . . . . . . . . TBL          >  TOTO       
   Bibliothèque . . . . . . . . .              >   QTEMP      
 Fichier source . . . . . . . . . SRCFILE      > *PROMPT        <définition
   Bibliothèque . . . . . . . . .                                dynamique
 Membre source  . . . . . . . . . SRCMBR         *TBL       
 Type de table  . . . . . . . . . TBLTYPE      > *SRTSEQ 
 Séquence de tri de base  . . . . BASESRTSEQ     *langidshr     <modéle
   Bibliothèque . . . . . . . . .                             
 ID langue de base  . . . . . . . BASELANGID     *JOB       
 ID codé de jeu de caractères . . CCSID          *JOB        
 Texte 'descriptif' . . . . . . . TEXT           *BLANK
                    
 


|   
                         Création d'une séquence de tri 
 Table:   TOTO           Biblio:   QTEMP      
 Stockée avec CCSID:   65535      
 
 Indiquez un numéro de séquence compris entre 0 et 9999 pour chaque caractère 
   et appuyez sur ENTREE. 
 (Si vous souhaitez grouper des caractères pour le tri, 
 entrez le même numéro de séquence pour chacun d'entre eux). 
 
 Séquence  Car       Séquence  Car       Séquence  Car       Séquence  Car 
   0670     8          0690     Ä          0690     Æ          0720     ð 
   0680     9          0690     À          0700     B          0720     d 
   0690     A          0690     Á          0700     b          0730     é 
   0690     â          0690     Ã          0710     C          0730     E 
   0690     ä          0690     Å          0710     ç          0730     è 
   0690     á          0690     à          0710     Ç          0730     ê 
   0690     ã          0690     a          0710     c          0730     ë 
   0690     å          0690     ª          0720     Ð          0730     É 
   0690     Â          0690     æ          0720     D          0730     Ê 
                                                                    A suivre... 
 F3=Exit   F5=Réafficher    F6=Créer   F11=Car hexa   F12=Annuler 
 F17=Afficher à partir de   F20=Renuméroter 


|   
                         Création d'une séquence de tri 
 Table:   TOTO           Biblio:   QTEMP      
 Stockée avec CCSID:   65535                   RAPPEL : *LANGIDSHR 
 
 Indiquez un numéro de séquence compris entre 0 et 9999 pour chaque caractère 
   et appuyez sur ENTREE. 
 (Si vous souhaitez grouper des caractères pour le tri, 
 entrez le même numéro de séquence pour chacun d'entre eux). 
 
 Séquence  Car  Hexa        Séquence  Car  Hexa        Séquence  Car  Hexa 
   0670     8    F8           0690     Ä    63           0690     Æ    9E 
   0680     9    F9           0690     À    64           0700     B    C2 
   0690     A    C1           0690     Á    65           0700     b    82 
   0690     â    42           0690     Ã    66           0710     C    C3 
   0690     ä    43           0690     Å    67           0710     ç    E0 
   0690     á    45           0690     à    7C           0710     Ç    68 
   0690     ã    46           0690     a    81           0710     c    83 
   0690     å    47           0690     ª    9A           0720     Ð    AC 
   0690     Â    62           0690     æ    9C           0720     D    C4 
                                                                    A suivre... 
 F3=Exit   F5=Réafficher    F6=Créer   F11=Car uniquement   F12=Annuler 
 F17=Afficher à partir de   F20=Renuméroter 


|   
 
Plus Quatre APis sur cette notion (voir aussi QLGSORT et QLGSRTIO)
 
  extrait le source d'une table   QLGRTVSS 
 
                             - CHAR(??) variable en retour
 
                             - BIN(4)   lg de la variable en retour
 
                             - CHAR(20) table qualifiée ou
                                        *JOB,*JOBRUN (identiques)
                                        *LANGIDUNQ
                                        *LANGIDSHR
                                        *HEX
                             - CHAR(10) langage ou *JOB,*JOBRUN
 
                             - BIN(4)   CCSID (0 = *JOB)
 
                             - CHAR(8)  format = RSST0100
 
                             - CHAR(??) code erreur
 


|   
 
 Structure de la variable en retour (format RSST0100)
 
                                    - BIN(4) nbr d'octets nécessaires
                                    - BIN(4) nbr d'octets utilisés
                                    - BIN(4) CCSID du job
                                    - BIN(4) CCSID de la table
                                    - CHAR(1) caractères remplacés ?
                                              0 = non, 1= oui
                                    - CHAR(1) Poids 1 = partagés
                                                    2 = unique
                                    - CHAR(10) nom de la table
                                    - CHAR(10) nom de la bibliothèque
                                    - CHAR(10) table du job
                                    - CHAR(10) bibil/table du job
                                    - CHAR(3)  langage
                                    - CHAR(2)  pays
                                    - CHAR(256) source de la table
 
 
 
 


|   
 
  cvt d'une table d'un CCSID      QLGCNVSS 
      vers au autre CCSID
                             - CHAR(256) source converti (en retour)
 
                             - CHAR(1) retour/poids 1 = partagés
                                                    2 = unique
 
                             - CHAR(1) caractères remplacés ?
                                              0 = non, 1= oui
 
                             - CHAR(256) source à convertir
 
                             - BIN(4)    CCSID source
 
                             - BIN(4)    CCSID de conversion
 
                             - CHAR(??) code erreur
 
 
 
 


|   
  retrouve liste des langages     QLGRTVLI 
 
                             - CHAR(??) liste des langages (fmt RTVL0100)
                                    - BIN(4) nbr d'octets nécessaires
                                    - BIN(4) nbr d'octets utilisés
                                    - BIN(4) nbr de langages renvoyés
                                    - BIN(4) CCSID du texte descriptif
                                    - BIN(4) Offset du premier langage
                                    - CHAR(??) réservé
         repété (nbr de     !--       - CHAR(3) ID langage
         langages) fois.    !--       - CHAR(40) text descriptif
 
                             - BIN(4)   lg de la variable précédente
 
                             - CHAR(8)  format = 'RTVL0100'
 
                             - CHAR(??) code erreur
 
  valide un langage               QLGVLID  
 
                             - CHAR(3)  ID langage à valider
                             - CHAR(??) code erreur





©AF400