Séquences d'échappement

Un article de Mangue.org, l'encyclopéde libre.

Les séquences d'échappement vont vous permettre d'insérer dans vos chaînes de caractères des caractères spéciaux pour la tabulation, le retour chariot ou d'autres encore !


Les séquences d'échappement

En Caml, les caractères sont délimités par ` `, ça ne vous a peut-être pas intéressé pour le moment, mais comment faire pour afficher le caractère ` lui même ? Et bien c'est là que les séquences d'échappement vont devenir utiles. Les habitués d'autres langages comme le C, C++, C#, Java, etc. esquissent déjà un sourire puisqu'ils connaissent très bien ça !

Les séquences d'échappement commencent toutes par le caractère \, mais plutôt que de vous faire tout un discours voici un tableau présentant celles qui existent en Caml :
\`C'est justement la séquence qui permet d'imprimer le `
\\En utilisant ceci vous pourrez imprimer l'antislash \
\tCette séquence remplace la tabulation, elle est très utilisée
\bIl s'agit du retour chariot. En l'invoquant vous renverrez le curseur sur le dernier caractère imprimé, mais attention vous ne l'effacerez pas puisque le retour chariot n'est pas destructif !
\nRenvoie le curseur au début de la ligne suivante.
\rLe curseur se positionne sur le premier caractère de la ligne courante.
# let chaîne1 = "deux tabulations\t\tdans une chaîne !"
  and chaîne2 = "un retour chariot\ndans une chaîne" ;;
chaîne1 : string = "deux tabulations\t\tdans une chaîne !"
chaîne2 : string = "un retour chariot\ndans une chaîne"
# print_endline chaîne1;
 print_string chaîne2 ;;
deux tabulations                dans une chaîne !
un retour chariot
dans une chaîne- : unit = ()

Danger
Attention les séquences d'échappement apparaissent telles qu'elles lorsque vous demandez l'évaluation d'une chaîne de caractères. Seule leur impression produit le résultat escompté !


Les codes ASCII

En Caml, vous pouvez imprimer un caractère à l'écran directement en passant par son code ASCII. Pour celà il vous suffit de mettre une séquence \xxxxxx est justement le code ASCII du dit caractère (en décimal) ! Celà vous permettra de faire apparaitre directement des caractères de controles ou des caractères non imprimables, comme ceux qui ne sont pas sur le clavier mais qui existent pourtant dans votre table ASCII :)


Un exemple, le type individu

Nous allons mettre à profit les séquences d'échappement, et surtout la tabulation pour avoir une impression correcte d'un enregistrement avec tous les champs alignés entre eux. Commençons par contruire notre type individu, il s'agit d'un enregistrement ... Nous définirons ensuite une liste d'individus afins de servir d'exemple puis nous l'imprimerons :

# type individu =
 {Nick: string; Prénom: string; DateDeNaissance: int} ;;
Type individu defined.
# let liste_d_individus =
[
 { Nick= "Bgw";    Prénom= "Nicolas";  DateDeNaissance= 1981};
 { Nick= "Gfx";    Prénom= "Romain";   DateDeNaissance= 1982};
 { Nick= "XtCorp"; Prénom= "Xavier";   DateDeNaissance= 1981};
 { Nick= "nop";    Prénom= "Marc";     DateDeNaissance= 1978};
] ;;
liste_d_individus : individu list =
 [{Nick = "Bgw"; Prénom = "Nicolas"; DateDeNaissance = 1981};
  {Nick = "Gfx"; Prénom = "Romain"; DateDeNaissance = 1982};
  {Nick = "XtCorp"; Prénom = "Xavier"; DateDeNaissance = 1981};
  {Nick = "nop"; Prénom = "Marc"; DateDeNaissance = 1978}]
# let rec affiche_individus = fun
|                            []                                -> ()
| ({Nick=nick; Prénom=prénom; DateDeNaissance=date} :: autres) ->
  print_string(nick);
  print_char `\t`;
  print_string(prénom);
  print_char `\t`;
  print_int(date);
  print_newline();
  affiche_individus(autres) ;;
affiche_individus : individu list -> unit = <fun>
# affiche_individus liste_d_individus ;;
Bgw     Nicolas 1981
Gfx     Romain  1982
XtCorp  Xavier  1981
nop     Marc    1978
- : unit = ()

Bon tout est bien aligné.
Il y aurait des mofications mineures à apporter pour que le résultat soit conforme à ce que l'on désire mais c'est déjà un bon début :-)

Outils personels