Comment repérer les caractères spéciaux et s’en débarrasser

Comment repérer les caractères spéciaux et s’en débarrasser

By : -

Comment repérer les caractères spéciaux et s’en débarrasser

D’où viennent les caractères spéciaux ? Quelques exemples.

Vous aimez peut-être le retour à la ligne dans une cellule Excel® pour améliorer la lisibilité de votre texte. Vous savez cette combinaison Alt+Entrée. Vous aimez peut-être aussi le les tabulations, les puces et autres fonctionnalités de formatage. Ce sont autant d’occasions d’entrer des caractères spéciaux non imprimables.

Microsoft office® et IOS® ne sont pas en reste. Tapez une guillemet simple de base et par défaut elle sera convertit dans un autre type d’apostrophe, celui-là très spécial. A chaque nouveau caractère, vous vous retrouvez à taper Ctrl+Z (sous Windows®) ou cmd+Z (sous IOS®) pour que la conversion n’ai pas lieu.

Du coup, lors de l’importation de fichiers, on se retrouve souvent avec des caractères non désirés.

Les caractères ASCII (American Standard Code for Information Interchange) sont au total 256. Parmi eux, on trouve les lettres de l’alphabet, les chiffres, des lettres propres à certaines langues comme notre é, et ces fameux caractères non imprimables qui ne s’affichent pas avec un proc print.

Les caractères ASCII utilisent 7 bits en espaces de stockage.

Pour ajouter les caractères propres à chaque langue, le standard Unicode™ a été introduit.

2. Quels sont les 34 caractères non imprimables ?

Les caractères ASCII sont numérotés :

  • de 0 à 255 (valeur décimale)
  • de 00 à FF (valeur hexadécimal)

Les 33 premiers caractères (0 à 32) et le caractère 127 forment les caractères non imprimables.

DEC HEX Description
  0  00 NUL Null
  1  01     STX Start of Header
  2  02     SOT Start of Text
  3  03     ETX End of Text
  4  04     EOT End of Transmission
  5  05     ENQ Enquiry
  6  06     ACK Acknowledge
  7  07     BEL Bell
  8  08      BS BackSpace
  9  09      HT Horizontal Tabulation
 10  0A      LF Line Feed
 11  0B      VT Vertical Tabulation
 12  0C      FF Form Feed
 13  0D      CR Carriage Return
 14  0E      SO Shift Out
 15  0F      SI Shift In
 16  10     DLE Data Link Escape
 17  11     DC1 Device Control 1 (XON)
 18  12     DC2 Device Control 2
 19  13     DC3 Device Control 3 (XOFF)
 20  14     DC4 Device Control 4
 21  15     NAK Negative acknowledge
 22  16     SYN Synchronous Idle
 23  17     ETB End of Transmission Block
 24  18     CAN Cancel/Annuler
 25  19      EM End of Medium
 26  1A     SUB Substitute/Substituer
 27  1B     ESC Escape/Echappe
 28  1C      FS File Separator
 29  1D      GS Group Separator
 30  1E      RS Record Separator
 31  1F      US Unit Separator
 32  20 [Space] Space
 33  21         !
 34  22         "
 35  23         #
 36  24         $
 37  25         %
 38  26         &
 39  27         '
 40  28         (
 41  29         )
 42  2A         *
 43  2B         +
 44  2C         ´
 45  2D         -
 46  2E         -
 47  2F         /
 48  30         0
 49  31         1
 50  32         2
 51  33         3
 52  34         4
 53  35         5
 54  36         6
 55  37         7
 56  38         8
 57  39         9
 58  3A         :
 59  3B         ;
 60  3C         <
 61  3D         =
 62  3E         >
 63  3F         ?
 64  40         @
 65  41         A
 66  42         B
 67  43         C
 68  44         D
 69  45         E
 70  46         F
 71  47         G
 72  48         H
 73  49         I
 74  4A         J
 75  4B         K
 76  4C         L
 77  4D         M
 78  4E         N
 79  4F         O
 80  50         P
 81  51         Q
 82  52         R
 83  53         S
 84  54         T
 85  55         U
 86  56         V
 87  57         W
 88  58         X
 89  59         Y
 90  5A         Z
 91  5B         [
 92  5C         \
 93  5D         ]
 94  5E         ^
 95  5F         _
 96  60         `
 97  61         a
 98  62         b
 99  63         c
100  64         d
101  65         e
102  66         f
103  67         g
104  68         h
105  69         i
106  6A         j
107  6B         k
108  6C         l
109  6D         m
110  6E         n
111  6F         o
112  70         p
113  71         q
114  72         r
115  73         s
116  74         t
117  75         u
118  76         v
119  77         w
120  78         x
121  79         y
122  7A         z
123  7B         {
124  7C         |
125  7D         }
126  7E         ~
127  7F     DEL Delete/Supprimer

Source : ascii-table.com

3. Comment créer un caractère en hexadécimal avec SAS ?

Voyons donc comment créer une valeur hexadécimale.

La valeur hexadécimale est mise entre guillemets. Elle est suivie du suffixe x.

data exemple;
   length f1 $20;
   f1 = cat('Partie1','0A'x,'Partie2');
run;

4. Comment repérer les caractères spéciaux avec le format hex

Le programme qui suit affiche dans la log chaque lettre de la variable f1 avec un formatage en hexadecimal. C’est un moyen rapide de repérer un caractère spécial qui se cache dans un texte.

Chaque paire (dans la log) représente un caractère. Ici, 0A est la valeur hexadécimale pour les points de suspension.

data _null_;
   set exemple;
   put f1 hex.;
run;

Vous pouvez aussi choisir de créer une nouvelle variable contenant le texte version hexadécimale.

La nouvelle variable aura le double de caractères et donc devra être deux fois plus longue.

data exemple;
   length f1 $20 f4 $40;
   f1 = cat('Partie1','0A'x,'Partie2');
   f4 = put(f1,hex.);
run;

5. Quelle(s) fonction(s) utiliser pour éliminer des caractères spéciaux?

Les fonctions translate et tranwrd peuvent convertir des caractères spéciaux en espaces, alors que la combinaison des fonctions transtrn et trimn éviteront un blanc inutile. 

La fonction translate est composée de trois paramètres : le texte d’origine, les nouveaux caractères et les caractères à remplacer.

Regardons le programme ci-dessous : la première instruction crée une variable appelée f1. Cette variable contient une chaîne de caractères avec au milieu un caractère spécial non imprimable. Les deux instructions suivantes créée les variables f2_tranlate et f3_tranwrd.

data exemple;
   length f1 f2_translate f3_tranwrd f4_transtr $20;
   f1           = cat('Partie1','0A'x,'Partie2');
   f2_translate = translate(f1,' ','0A'x);
   f3_tranwrd   = tranwrd(f1,'0A'x,' ');
   f4_transtrn  = transtrn(f1,'0A'x,trimn(''));
run;

La fonction tranwrd est également composée de trois paramètres : le texte d’origine, le groupe de lettres à remplacer et le nouveau texte. Attention, c’est l’ordre inverse de la fonction translate.

La fonction transtrn fonctionne sur le même principe que la fonction tranwrd mais elle autorise une longueur de zéro dans son troisième paramètre.

Remplacer plus d’un caractère : vous pouvez lister autant de caractères hexadécimaux que vous le souhaitez dans le troisième paramètre de la fonction translate.

Ici, chacun des dix premiers caractères ASCII numérotés 00, 01, 02,…09 et 0A seront replacés par un espace, s’ils existent.

data exemple;
   set exemple;
   length f2_translate $20;
   f2_translate=translate(f1,' ','000102030405060708090A'x);
run;

 

One Comment

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

douze − sept =