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 |