Exercice - Combiner des chaînes à l’aide de séquences d’échappement de caractères

Effectué

Supposez qu’il vous a été demandé de créer une maquette d’un outil en ligne de commande qui générera des factures en anglais et en japonais. Vous n’êtes pas obligé de créer la fonctionnalité qui génère les factures pour l’instant. Il vous suffit de fournir l’interface en ligne de commande aux clients internes du service de facturation pour leur approbation. Votre responsable vous a demandé d’ajouter une mise en forme afin que la progression actuelle de l’outil soit claire. Il vous a également demandé de fournir des instructions aux utilisateurs japonais sur la manière de générer des factures en japonais.

Exercice - Mettre en forme des chaînes littérales en C#

Dans cet exercice, vous allez apprendre différentes techniques pour afficher des caractères spéciaux et ajouter différents types de mise en forme à la sortie.

Séquences d’échappement de caractère

Une séquence de caractères d’échappement est une instruction destinée à signaler au runtime qu’il faut insérer un caractère spécial qui affectera la sortie de votre chaîne. En C#, la séquence de caractères d’échappement commence par une barre oblique inverse \ suivie du caractère que vous échappez. Par exemple, la séquence \n ajoute une nouvelle ligne et la séquence \t ajoute une tabulation.

Le code suivant utilise des séquences de caractères d’échappement pour ajouter de nouvelles lignes et des tabulations :

Console.WriteLine("Hello\nWorld!");
Console.WriteLine("Hello\tWorld!");

Si vous exécutez le code, vous voyez la sortie suivante :

Hello
World!
Hello   World!

Que se passe-t-il si vous devez insérer un guillemet double dans une chaîne littérale ? Si vous n’utilisez pas de séquences de caractères d’échappement, vous perturberez le compilateur, car il pensera que vous souhaitez mettre fin à la chaîne prématurément. Le compilateur ne comprendra pas l’objectif des caractères situés après le deuxième guillemet double.

Console.WriteLine("Hello "World"!");

L’éditeur .NET insèrera une ligne ondulée rouge sous World. Si vous tentez quand même d’exécuter le code, vous verrez la sortie suivante :

(1,27): error CS1003: Syntax error, ',' expected
(1,27): error CS0103: The name 'World' does not exist in the current context
(1,32): error CS1003: Syntax error, ',' expected

Pour gérer cette situation, utilisez la séquence d’échappement \" :

Console.WriteLine("Hello \"World\"!");

Si vous exécutez le code ci-dessus, vous obtenez la sortie suivante :

Hello "World"!

Que se passe-t-il si vous devez utiliser la barre oblique inverse à d’autres fins, par exemple pour afficher un chemin de fichier ?

Console.WriteLine("c:\source\repos");

Malheureusement, C# réserve la barre oblique inverse pour les séquences d’échappement. Par conséquent, si vous exécutez le code, le compilateur affiche l’erreur suivante :

(1,22): error CS1009: Unrecognized escape sequence

Le problème est lié à la séquence \s. \r ne génère pas d’erreur, car il s’agit d’une séquence d’échappement valide pour un retour chariot. Toutefois, vous ne souhaitez pas utiliser de retour chariot dans ce contexte.

Pour résoudre ce problème, vous devez utiliser \\ afin d’afficher une barre oblique inverse unique.

Console.WriteLine("c:\\source\\repos");

L’échappement de la barre oblique inverse produit la sortie souhaitée :

c:\source\repos

Mettre en forme la sortie à l’aide de séquences d’échappement de caractères

  1. Sélectionnez tout le code dans l’éditeur .NET, puis appuyez sur Supprimer ou Retour arrière pour le supprimer.

  2. Pour créer la maquette de l’outil en ligne de commande, entrez le code suivant dans l’éditeur :

    Console.WriteLine("Generating invoices for customer \"Contoso Corp\" ... \n");
    Console.WriteLine("Invoice: 1021\t\tComplete!");
    Console.WriteLine("Invoice: 1022\t\tComplete!");
    Console.WriteLine("\nOutput Directory:\t");
    
  3. Maintenant, exécutez le code. Le résultat suivant s’affiche dans la console de sortie :

    Generating invoices for customer "Contoso Corp" ...
    
    Invoice: 1021           Complete!
    Invoice: 1022           Complete!
    
    Output Directory:    
    

Littéral de chaîne verbatim

Un littéral de chaîne textuel conserve tous les espaces et caractères sans avoir à échapper la barre oblique inverse. Pour créer une chaîne textuelle, utilisez la directive @ avant la chaîne littérale.

Console.WriteLine(@"    c:\source\repos    
        (this is where your code goes)");

Notez que la chaîne s’étend sur deux lignes et que l’espace blanc généré par cette instruction C# est conservé dans la sortie suivante.

    c:\source\repos    
        (this is where your code goes)

Mettre en forme la sortie à l’aide de littéraux de chaîne verbatim

  1. Ajoutez la ligne de code suivante sous le code que vous avez créé :

    Console.Write(@"c:\invoices");
    
  2. Maintenant, exécutez le code. Vous verrez le résultat suivant qui inclut le répertoire de sortie :

    Generating invoices for customer "Contoso Corp" ...
    
    Invoice: 1021           Complete!
    Invoice: 1022           Complete!
    
    Output Directory:
    c:\invoices
    

Caractères d’échappement Unicode

Vous pouvez également ajouter des caractères encodés dans des chaînes littérales à l’aide de la séquence d’échappement \u, puis un code à quatre caractères représentant un caractère en Unicode (UTF-16).

// Kon'nichiwa World
Console.WriteLine("\u3053\u3093\u306B\u3061\u306F World!");

Notes

Toutefois, il existe plusieurs mises en garde : Tout d’abord, certaines consoles telles que l’invite de commandes Windows n’affichent pas tous les caractères Unicode Elle remplace ces caractères par des points d’interrogation. De plus, les exemples utilisés ici sont UTF-16. Certains caractères nécessitent UTF-32 et demandent donc une séquence d’échappement différente. Il s’agit d’un sujet complexe, et ce module a uniquement pour but de vous montrer ce qui est possible. En fonction de vos besoins, vous devrez peut-être passer beaucoup de temps à apprendre et à utiliser les caractères Unicode dans vos applications.

Mettre en forme la sortie à l’aide de caractères d’échappement Unicode

Pour terminer la maquette de l’outil en ligne de commande, vous allez ajouter une expression en japonais qui se traduit par : « Pour générer des factures en japonais ». Ensuite, vous afficherez une chaîne littérale verbatim qui représente une commande que l’utilisateur peut entrer. Vous ajouterez également des séquences d’échappement pour la mise en forme.

  1. Ajoutez le code suivant à votre application :

    // To generate Japanese invoices:
    // Nihon no seikyū-sho o seisei suru ni wa:
    Console.Write("\n\n\u65e5\u672c\u306e\u8acb\u6c42\u66f8\u3092\u751f\u6210\u3059\u308b\u306b\u306f\uff1a\n\t");
    // User command to run an application
    Console.WriteLine(@"c:\invoices\app.exe -j");
    
  2. Pour vérifier que votre code est correct, comparez-le avec ce qui suit :

    Console.WriteLine("Generating invoices for customer \"Contoso Corp\" ...\n");
    Console.WriteLine("Invoice: 1021\t\tComplete!");
    Console.WriteLine("Invoice: 1022\t\tComplete!");
    Console.WriteLine("\nOutput Directory:\t");
    Console.Write(@"c:\invoices");
    
    // To generate Japanese invoices:
    // Nihon no seikyū-sho o seisei suru ni wa:
    Console.Write("\n\n\u65e5\u672c\u306e\u8acb\u6c42\u66f8\u3092\u751f\u6210\u3059\u308b\u306b\u306f\uff1a\n\t");
    // User command to run an application
    Console.WriteLine(@"c:\invoices\app.exe -j");
    
  3. Maintenant, exécutez le code. Le résultat suivant s’affiche dans la console de sortie :

    Generating invoices for customer "Contoso Corp" ...
    
    Invoice: 1021            Complete!
    Invoice: 1022            Complete!
    
    Output Directory:
    c:\invoices
    
    日本の請求書を生成するには:
        c:\invoices\app.exe -j
    

Récapitulatif

Voici ce que vous avez appris sur la mise en forme des chaînes littérales jusqu’à présent :

  • Utilisez des séquences d’échappement de caractères quand vous devez insérer un caractère spécial dans une chaîne littérale, comme une tabulation \t, une nouvelle ligne \n ou un guillemet double \".
  • Utilisez un caractère d’échappement pour la barre oblique inverse \\ quand vous devez utiliser une barre oblique inverse dans tous les autres scénarios.
  • Utilisez la directive @ pour créer un littéral de chaîne textuel afin de conserver toute la mise en forme des espaces blancs et les caractères de barre oblique inverse dans une chaîne.
  • Utilisez \u plus un code à quatre caractères pour représenter les caractères Unicode (UTF-16) dans une chaîne.
  • En fonction de l’application, il se peut que les caractères Unicode ne s’affichent pas correctement.