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