Les fichiers texte en C++ Rappel, qu’est ce qu’un fichier? Une suite de données de même type ! Stockées en mémoire secondaire (disque dur, CD, Diskette…). Sous forme d’octet (comme en mémoire centrale). A quoi ça sert: Les données en mémoire centrale durent uniquement le temps de programme => Mais un fichier est persistant. Beaucoup plus de place en mémoire secondaire (disque dur…). Mais! L’accès à la mémoire secondaire est beaucoup plus long. Bases de la programmation en C++
Généralité sur les flux (ou flots) La lecture et l’écriture dans un fichier sont des opérations d’entrée / sortie. Utilisation de la bibliothèque iostream (déjà utilisée pour les E/S écran/clavier) Bases de la programmation en C++
Déclaration d’un fichier Un fichier possède un nom physique (connu du système d’exploitation) (exemple: Cours7.ppt). Pour utiliser un fichier dans un programme, on lui associe un nom logique (le nom de la variable de type fichier). Avec la bibliothèque iostream, le type fichier est fstream. Déclaration: fstream nom_logique ; On a déclaré une variable de type fichier (fstream). Cette variable ne correspond encore à aucun fichier physique. Bases de la programmation en C++
Ouverture d’un fichier C’est la qu’on associe un fichier physique à notre variable de type fichier (fstream). Syntaxe: Nom de la variable de type fichier nom_logique . open (nom_physique , mode_ouverture); Nom physique du fichier sur le disque Mode d’ouverture du fichier Bases de la programmation en C++
Les modes d’ouverture de fichiers Ecriture ios::out : Le pointeur de position du fichier est placé au début (le fichier est effacé). Lecture ios::in : Le pointeur de position du fichier est placé au début du premier enregistrement du fichier. Mise à jour : ios::app : Le pointeur de position du fichier est placé à la fin du fichier physique (après le dernier enregistrement). Fermeture d’un fichier: nom_logique . close( ); Bases de la programmation en C++
Lecture séquentielle d’un fichier Différentes fonction de lecture: L’opérateur >> (fonctionne comme cin). nom_fichier_logique >> variable1 [>> variable2>> …]; Espace et le saut de ligne agissent comme des séparateurs L’opérateur get(char & car) nom_fichier_logique . get ( car) ; Lecture d’un caractère (qui est mis dans car) L’opérateur read(char * chaine, int taille) nom_fichier_logique . read ( chaineCar , n) ; Lecture de n caractères qui sont mis sous forme de chaine dans chaineCar Attention, dés qu’on a lu un enregistrement il faut tester si le fichier n’est pas fini ! nom_fichier_logique . eof () ==0 Bases de la programmation en C++
Lecture séquentielle d’un fichier #include <fstream.h> int main () { char car; fstream f; // déclaration d’une variable de type fichier (ou flux) f . open ("fich1.txt" , ios::in); /* ouverture en lecture. */ // lecture et affichage du fichier caractère par caractère f.get (car); // on lit le premier caractère while (! f.eof ()) // tant que le fichier n’est pas fini cout<< car; f . get (car); // on lit 1 caractère //le pointeur de position est alors décalé } return 0; Bases de la programmation en C++
Ecriture séquentielle d’un fichier Différentes fonction d’écriture: L’opérateur << (fonctionne comme cout). nom_fichier_logique << variable1 [<< variable2<< …]; L’opérateur put (char car) nom_fichier_logique . put ( car) ; Ecriture d’un caractère L’opérateur write(char * chaine, int taille) nom_fichier_logique . write ( chaineCar , n) ; Ecriture des n caractères contenus dans ChaineCar Vérification que le fichier a bien été ouvert nom_fichier_logique . good( ) Remise à 0 du statut de fin de fichier activé à la fin d’une lecture. nom_fichier_logique . clear( ); Bases de la programmation en C++
Ecriture séquentielle d’un fichier #include <fstream.h> int main () { char chaine[255]; // déclaration et ouverture d'un fichier texte fstream fich; fich . open ("fich1.txt" , ios::out); // lecture au clavier et écriture sur chaîne de caractères cin >> chaine; while (strcmp(chaine,"stop")!=0) //on arrête quand l’utilisateur marque stop fich<<chaine; //on écrit la chaîne de caractères /*on aurrait pu utiliser fich1.write(chaine, 255) mais les 255 caractères aurait été affiché !*/ cin>>chaine; } // fermeture du fichier fich.close (); return 0; Bases de la programmation en C++