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

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))

Print Friendly, PDF & Email