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 !
\, 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 \ |
\t | Cette séquence remplace la tabulation, elle est très utilisée |
\b | Il 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 ! |
\n | Renvoie le curseur au début de la ligne suivante. |
\r | Le 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 \xxx où xxx 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 :-)

