Les chaînes de caractères et les fichiers à accès séquentiel en C# 420-BBT-BB Hiver 2009 Fabrizio Gotti
Introduction Les chaînes de caractères sont des suites de caractères qui représentent habituellement du texte Les chaînes sont associées au type string vu en classe string s = "Hal"; string vide = ""; // chaîne vide Chaque caractère dans une chaîne a une position (appelée aussi indice). Le 1 er caractère a l indice 0.
Concaténation La concaténation est une opération qui consiste à assembler des fragments de chaînes ensemble On concatène avec l opérateur + string t = "H" + "al"; // t vaut 'Hal' t += " "; // t vaut 'Hal ' t += 9000; // t vaut 'Hal 9000' t = "Je suis " + t; // t vaut 'Je suis Hal 9000' Attention : lorsqu on fait entier + chaîne, on a une concaténation de deux chaînes, pas une addition arithmétiques
Caractères spéciaux Pour inclure certains symboles dans une chaîne de caractères, il faut utiliser la barre oblique inverse suivie d un caractère défini par C# Pour insérer On utilise Exemple de chaîne Sortie à l écran si la chaîne est affichée un guillemet \" "C'est \"Hung up\"." C'est "Hung up". une tabulation \t "Prénom:\tEric" Prénom: Eric "Nom:\tTremblay" Nom: Tremblay un retour chariot \n "A\nL\nL\nO" A L L O barre oblique inverse \\ "C:\\temp\\a.txt" C:\temp\a.txt
Conversions entre entier et chaîne Il est parfois nécessaire de convertir une chaîne de caractères en entier, et vice-versa Conversion string int string s = "9000"; int i = int.parse(s); // i vaut 9000 Conversion int string int i = 9000; string s = i.tostring(); // s vaut "9000"
Opérations sur les chaînes Les variables de type string permettent certaines opérations utiles La notation générale pour l utilisation de ces opérations est la suivante : résultat = nomvariablestring.nomopération
Opérations sur les chaînes (2) Longueur d une chaîne : opération Length Pour trouver le nombre de caractères dans une chaîne string chaine = "Cobalt 60"; int longueur = chaine.length; // longueur de 9 Mise en majuscules : opération ToUpper Mise en minuscules : opération ToLower string chaine = "Cobalt 60"; string minuscule = chaine.tolower(); // cobalt 60 string majuscule = chaine.toupper(); // COBALT 60 string chaine2 = "Carbone 14"; Console.Out.WriteLine(chaine2.ToUpper());
Opérations sur les chaînes (3) Recherche dans une chaîne : IndexOf Recherche un passage dans une chaîne Retourne l index (position) du début du passage dans la chaîne Si le passage est là plus d une fois, trouve le premier L index du premier caractère d une chaîne est toujours 0. Si le passage n est pas trouvé, la fonction retourne -1. string w = "Hal 9000"; int positiondual = w.indexof("al"); // indice 1 string w = "Hal 9000"; int positiondual = w.indexof("0"); // indice 5 if (w.indexof("rouge") == -1) Console.Out.WriteLine("Pas de rouge ici");
Opérations sur les chaînes (4) Extraction d une sous-chaîne : Substring Trouve un fragment (sous-chaîne) commençant à une position donnée de la chaîne originale La fonction Substring attend deux paramètres pour préciser la sous-chaîne à extraire : 1. La position de départ où commencer à extraire 2. La longueur de la sous-chaîne à extraire L index du premier caractère d une chaîne est toujours 0. string chaine = "Cobalt 60"; string premiermot = chaine.substring(0,6); // premiermot vaut maintenant 'Cobalt'
Opérations sur les chaînes (5) Comparaison lexicographique de deux chaînes : CompareTo La fonction retourne un entier dont la valeur indique le résultat de la comparaison 0 : les deux chaînes sont identiques < 0 : la première chaîne vient avant la deuxième > 0 : la première chaîne vient après la deuxième string chaine1 = "Cobalt 60"; string chaine2 = "Carbone 14"; if (chaine1.compareto(chaine2) > 0) Console.Out.WriteLine(chaine1 + " après " + chaine2); //affiche le message 'Cobalt 60 après Carbone 14'
Les fichiers Les fichiers stockent l information de façon persistante (p.ex. un document Word sauvegardé) Nous travaillerons avec des fichiers texte (comme ceux créés avec le Bloc-notes de Windows) Nous lirons et écrirons les fichiers une ligne à la fois, du haut vers le bas; chaque ligne est une string Un fichier a un chemin et un nom, contenu dans une string, p.ex. pour le fichier c:\temp\a.txt, on a string nomfichier = "C:\\temp\\a.txt";
Pour trouver le nom complet d un fichier Trouver le fichier dans l Explorateur Windows Cliquer sur le bouton droit et choisir «Propriétés» Le nom complet du fichier = «Emplacement» + «Nom du fichier» Nom du fichier Emplacement
Opérations de base sur les fichiers Avant toute chose, il faut ajouter, tout au haut du programme, la ligne de code using System.IO; Pour vérifier si un nom de fichier désigne un fichier qui existe, on utilise File.Exists(nomFichier) if (!File.Exists("c:\\Mes Documents\\rouge.txt")) Console.Out.WriteLine("Fichier inexistant!");
Écriture dans un fichier Se fait à l aide d un nouveau type de variable, le type StreamWriter string nomfichier = "c:\\temp\\a.txt"; StreamWriter fichiersortie = File.CreateText(nomFichier); fichiersortie.writeline("1re ligne de texte"); fichiersortie.writeline("2e ligne de texte"); fichiersortie.writeline("3e ligne " + "de texte"); // etc. fichiersortie.close(); // On ferme toujours le fichier! Si le fichier existe déjà, il est écrasé lorsqu on fait CreateText
Lecture d un fichier Se fait à l aide d un nouveau type de variable, le type StreamReader string nomfichier = "c:\\temp\\a.txt"; StreamReader fichierentree = File.OpenText(nomFichier); // tant qu'il reste une ligne à lire, on la lit // et on l'affiche à l'écran string ligne = ""; // ligne lue while (fichierentree.peek() > 0) { ligne = fichierentree.readline(); Console.Out.WriteLine("Lu: " + ligne); } fichierentree.close(); // on ferme le fichier