Accueil du site > Les articles > Caractères non-affichables (Erreur E/S)
Version à imprimer Enregistrer au format PDF

Caractères non-affichables (Erreur E/S)

Comment détecter les enregistrements, comportant des caractères incorrects, dans un fichier (CPF5192 ).

mardi 22 mars 2005, par Serge Gomes Visites  4313

Quelques requêtes SQL permettant de rechercher/remplacer des caractères dans une chaine.


L’erreur survient lorsque l’on souhaite afficher des données en sortie (DSPF) qui contiennent des codes hexadécimaux inférieurs à 40.

- Liste des code HEXA pouvant générer cette erreur :

01-02-03-04-10-11-12-13-14-15-1D

- Requête SQL qui récupère tous les codes associés à un libellé succeptible de provoquer une erreur si, utilisé pour l’affichage.

SELECT CODE
FROM FICHIER WHERE
MOD(LOCATE('01', HEX(LIBEL)), 2 ) > 0  OR  
MOD(LOCATE('02', HEX(LIBEL)), 2 ) > 0  OR  
MOD(LOCATE('03', HEX(LIBEL)), 2 ) > 0  OR  
MOD(LOCATE('04', HEX(LIBEL)), 2 ) > 0  OR  
MOD(LOCATE('10', HEX(LIBEL)), 2 ) > 0  OR  
MOD(LOCATE('11', HEX(LIBEL)), 2 ) > 0  OR  
MOD(LOCATE('12', HEX(LIBEL)), 2 ) > 0  OR  
MOD(LOCATE('13', HEX(LIBEL)), 2 ) > 0  OR  
MOD(LOCATE('14', HEX(LIBEL)), 2 ) > 0  OR  
MOD(LOCATE('15', HEX(LIBEL)), 2 ) > 0  OR
MOD(LOCATE('1D', HEX(LIBEL)), 2 ) > 0

- Requête permettant de remplacer le caractère X’01’ par un espace :

UPDATE FICHIER SET ZONE = TRANSLATE(ZONE, ' ',X'01'  
) WHERE LOCATE(X'01', ZONE) > 0                              

- Requête qui remplace le caractère X’04’ par la chaine ’OE’. L’uitlisation de TRANSLATE est impossible car on veut, ici, remplacer un caractère par deux caractères.

UPDATE FICHIER
SET ZONE = SUBSTR(ZONE, 1, LOCATE(X'04', ZONE) - 1 )
CONCAT 'OE' CONCAT  
SUBSTR(ZONE,
LOCATE(X'04', ZONE) + 1,
LEN(TRIM(ZONE)) - LOCATE(X'04', ZONE) - 1)
WHERE LOCATE(X'04', ZONE) > 0                                                    

- Requête pour supprimer tous les espaces d’une zone

UPDATE SERGE/BOOKS                                          
   SET TITLE = SUBSTR(TITLE, 1, LOCATE(' ', TITLE) - 1 )  
   CONCAT                                                  
   SUBSTR(TITLE,  LOCATE(' ', TITLE) + 1,                  
   LENGTH(TRIM(TITLE)) - LOCATE(' ', TITLE))              
   WHERE LOCATE(' ', TITLE) > 0  and                      
    LOCATE(' ', TITLE) < length(trim(TITLE))