Diapositives vues en classe
Transcription
Diapositives vues en classe
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 1er 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 += " "; t += 9000; t = "Je suis " + t; // // // // t t t t vaut vaut vaut vaut 'Hal' 'Hal ' 'Hal 9000' '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" "Nom:\tTremblay" Prénom: Eric 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. 2. – La position de départ où commencer à extraire 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