Le web de Dominique Guebey – IBM AS/400 iSeries

Page web  : http://www.dg77.net/tekno/as400/ccsid.htm


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

L’art du CCSID sur iSeries

Sommaire

Ce qui va sans dire ou est supposé connu

Réglages sur iSeries Access for Windows et autres émulateurs

Ecran 5250 iSeries Access(PCSWS)

Communication > Configuration > Page de code hôte

Transfert de fichier

Exemple de transfert AS400 vers PC via l’émulation écran 5250 : Actions > Réception d’un fichier du système hôte > Le programme "Transfert…" s’affiche > Sélection du fichier. A ce moment :

  1. Le bouton "propriétés du transfert" permet de cocher "convertir le CCSID 65535" ce qui évite de récolter les données en hexadécimal.
  2. Les "options de format" permettent d’utiliser une commande SQL SELECT (voir les possibilités ci-dessous) ou choisir une autre langue AS400 ce qui permet d’intervenir sur l’ordre de tri.
iSeries Navigator

Avec iSeries Navigator, on voit les fichiers en hexadécimal si on ne lui met pas les points sur les i : Démarrer > Programmes > IBM iSeries Access for Windows > Administration ODBC > Onglet Sources de données utilisateurs > Sélectionner QDSN_[système] iSeries Access ODBC driver > Configurer :

Pendant qu’on y est, on adapte sa liste de bibliothèques : Mes connexions > [Système] > Bases de données > [nom BD] > en bas, panneau "Tâches relatives aux bases de données" > Choix des schémas à afficher

Au niveau général

Sytème

La valeur système QCCSID détermine le CCSID du système. Si on utilise 65535, l’OS400 déterminera une valeur par défaut à partir du code langue.

Utiliser iSeries Navigator, ou la commande (exemple)  CHGSYSVAL  SYSVAL(QCCSID)  VALUE(1147)  ou WRKSYSVAL.

                          Modification valeur système

 Valeur système . . . . :   QCCSID
 Description  . . . . . :   Identificateur codé de jeu de caractères

 Indiquez votre choix, puis appuyez sur ENTREE.

   CCSID  . . . . . . . .   1147       1-65535






 F3=Exit   F5=Réafficher   F12=Annuler
Au niveau du profil utilisateur

Chaque utilisateur peut avoir non seulement un CCSID mais aussi id. langue et code pays particuliers.

                   Modifier un profil utilisateur (CHGUSRPRF)

 Indiquez vos choix, puis appuyez sur ENTREE.

 Filtre code gravité  . . . . . . SEV            0
 Unité imprimante . . . . . . . . PRTDEV         *WRKSTN
 File d'attente en sortie . . . . OUTQ           TOTORD
   Bibliothèque . . . . . . . . .                  QUSRSYS
 Programme pour ATTN  . . . . . . ATNPGM         OPDMMCA1
   Bibliothèque . . . . . . . . .                  SCHMUTZ
 Séquence de tri  . . . . . . . . SRTSEQ         *SYSVAL
   Bibliothèque . . . . . . . . .
 Identificateur de langue . . . . LANGID         *SYSVAL
 ID pays ou région  . . . . . . . CNTRYID        *SYSVAL
 ID codé de jeu de caractères . . CCSID          1148
 Contrôle ID caractère  . . . . . CHRIDCTL       *SYSVAL
 Attributs travail envir local  . SETJOBATR      *SYSVAL
                         + si autres valeurs
 Environnement local  . . . . . . LOCALE         *SAME

                                                                    A suivre…
 F3=Exit   F4=Invite   F5=Réafficher   F12=Annuler   F13=Mode d'emploi invite
 F24=Autres touches
Dans le job

En cours de travail, on peut modifier le CCSID.  CHGJOB  CCSID(297)   Mais lors d’un CPYF, la commande examinera d’abord les fichiers de départ et d’arrivée.

Par le clavier-écran : voir la configuration du terminal, iSeries-Access ci-dessus.

Fichiers, DDS, BD et CCSID

PF à DDS, ou sans DDS

Dans la commande CRTPF, on peut indiquer un CCSID si le fichier créé est de type source (FILETYPE(*SRC)), pas s’il est *DATA.

Voici une DDS définissant le CCSID général d’un fichier (1147=FRA avec Euro) et un CCSID particulier pour une zone (13488=UNICODE UCS-2)

        **************  Début des données  ************************************
0001.00      A                                      UNIQUE                     
0002.00      A                                      CCSID(297)              
0003.00      A          R ENREX                                                
0004.00      A            DGNDOS        10          TEXT('N° Dossier')         
0005.00      A            DGNOM         54          TEXT('Nom')                
0006.00      A            TPTXT         64          TEXT('LIBELLE')         
0007.00      A            TPBIS         64A         CCSID(1208)             
0008.00      A                                      TEXT('UTF-8 ')          
0009.00      A            FILLER        64          DFT('.')                
0010.00      A          K DGNDOS                                            
        ***************  Fin des données  *************************************

Les valeurs distinctes de CCSID peuvent être définies aussi bien sur un fichier logique que sur le physique.

        **************  Début des données  ***********************************
0001.00      A          R ENREX                     PFILE(EXEMPLE0)           
0002.00      A            DGNDOS        10          TEXT('N° Dossier')        
0003.00      A            DGNOM         54          TEXT('Nom')               
0004.00      A            TPBIS         64A         CCSID(500)                
0005.00      A                                      TEXT('FR.  ')             
0006.00      A          K DGNOM                                               
        ***************  Fin des données  ************************************

Valeurs spéciales pour le mot-clef (mot-clé) CCSID :

Longueur
Uniquement pour fichier écran, si la zone est en UTF-16 (ou UCS-2)
*MIN
Peut remplacer la longueur de zone. Utilisable seulement comme référence par un fichiers écrans.
*LEN
Comme *MIN
*(NO)CONVERT
Relatif aux formats d’impression, pour des formats UCS-2/UTF-16
*NORMALIZE
Facilite l’utilisation de données UTF-8 ou UTF-16
Fichier créé sans DDS

Restriction : on peut créer un fichier sans référence à une description externe (DDS), en indiquant simplement la longueur de l’enregistrement, mais alors, dans les commandes CRTPF et CHGPF, la mention d’un CCSID n’est accepté que si c’est un fichier *SRC et non pas *DTA.

DSPF et PRTF

Utilisation dans une zone écran du mot-clef NOCCSID (i.e. pas de conversion sur cette zone) :

0000.40      A          R ECRAN00                                               
0000.50      A*%%TS  SD  19391011  082135  ADOLF       REL-V5R3M0  5722-WDS     
0000.60      A                                  1  4'ECR00'                     
0000.70      A            FLD001         6   B  1 60DSPATR(HI)                  
0000.80      A                                      NOCCSID                     

SQL et CCSID

CAST : permet de passer une donnée d’un type à l’autre. Sert à modifier la longueur, la précision (numérique)… ou le CCSID pour les données alphanumériques. C’est utile si le fichier a le CCSID passe-partout 65535 mais au moins certaines informations définies par un CCSID inhabituel.

 SELECT zone1, CAST(zone2 AS CHAR(30) CCSID 37), zone3 FROM monfichier 

ALTER TABLE : permet de modifier le CCSID d’une zone


>> ALTER TABLE MABIBLIO/EXEMPLE0 ALTER COLUMN TPTXT SET DATA TYPE 

  CHARACTER ( 64) CCSID 297 NOT NULL WITH DEFAULT              
  L'exécution de l'instruction ALTER est terminée pour la table

IFS, fichiers STREAM et CCSID

La commande CHGATR

Permet de modifier un certain nombre d’attributs d’un fichier. Exemple :  CHGATR  OBJ('/home/monrepertoire/monfichier.txt')  ATR(*CCSID)  VALUE(297) . Ci-dessous illustration pendant un transfert FTP depuis un PC.

  cd  /home/monrepertoire/tmp
  put  bidon.txt  monfichier.txt
  quote  rcmd  CHGATR  OBJ('monfichier.txt')  ATR(*CCSID)  VALUE(500)
  put  fichierpc.txt  monfichier.txt

Le fichier "bidon" contient un seul et quelconque caractère.

CHGATR peut être exécutée sur un groupe de fichiers, et également, en spécifiant SUBTREE(*YES), sur tous les sous-répertoires

QSH (Qshell) et CCSID

Attribution du CCSID

Création d’un fichier avec un CCSID donné:  touch  -C  819 monfichier.txt 

Changement du CCSID :  setccsid  819 monfichier.txt 

Changement du CCSID pendant l’affichage QSHELL (DSPF). Utiliser la touche [F15] Services.

                                  DSPF Options Screen                          
                                                                               
 Selection . . . . . . . . . . . .                                             
                                                                               
                                                                               
                                                                               
 3. Change CCSID of file . . . . .     00819    Job CCSID: 00297               
                                                                               
                                                                               
                                                                               
 F3=Exit   F12=Cancel                                                          
Utilisation de ICONV

L’utility sed recèle un piège. Voir les exemples dans la page sur QSHELL.

Serveur IBM HTTP

L’instance administration serveur et le gestionnaire de connection doivent être lancés avec un CCSID différent de 65535. Si on ne désire pas avoir un CCSID système autre que 65535, procéder de la façon suivante :