2mre année BTS Informatique de gestion 2009-2010 DAIGL ARLE Lycée LES PERSEVERA
2mre année BTS Informatique de gestion 2009-2010 DAIGL ARLE Lycée LES PERSEVERANTS Page 1 / 4 MINI PROJET DE DEVELOPPEMENT n°2 LANGAGE C Manipulation de fichiers Durée : 2 séances de 2 heures Moyens mis à disposition des élèves Matériels : - 1 PC en configuration station de travail Outils logiciels et système d’exploitation : - Windows XP Professionnel : DEV C++ - Ou Compilateur gcc de Linux (Debian ...) Divers : Objectifs à atteindre - Utiliser les fonctions de bases permettant la manipulation de fichiers en C - Mettre en application les bases d’un langage procédural - Mettre en application les structures de contrôles d’un langage procédural - Se familiariser avec la structure avancée « structure » d’un langage procédural - Faire un jeu d’essai Compétences concernées C41 C42 • Analyser la logique d'un algorithme et/ou d’un programme. • Maîtriser les instructions de base d'un langage de programmation procédural Informations supplémentaires : fonctions permettant de manipuler les fichiers en Langage C En C, la notion d’accès direct et d’accès séquentiel n’existe pas de manière explicite. Cela dépend de la manière dont on utilise les différentes fonctions et procédures. Lors de la manipulation des fichiers en C, on retrouve se qu’on appel les fonctions de bas niveau et les fonctions de haut niveau. Les fonctions de bas niveau effectuent des appels système, ce qui rend dépendantes du système d’exploitation. Elle effectue directement les accès fichiers. Les fonction de haut niveau font intervenir la bufferisation, c’est à dire que les caractères transmis sont stockés temporairement dans un tampon mémoire et ce n’est que lorsque le tampon est rempli que les données sont envoyés, dans le fichier sur le disque. De même que pour une opération de lecture, les données souhaités sont d’abord chargées dans le buffer et c’est dans le buffer que l’opération de lecture a lieu. Notez !!! que l’on va manipuler les fichiers avec les fonctions de haut niveau, par contre rien vous empêche d’approfondir sur les fonctions de bas niveau. 2mre année BTS Informatique de gestion 2009-2010 DAIGL ARLE Lycée LES PERSEVERANTS Page 2 / 4 Ouverture d’un fichier FILE * fopen(char * NomFichier, char * mode) char * NomFichier : chaîne de caractères placée entre guillemets contenant le nom du fichier à ouvrir avec éventuellement le chemin. char * mode : chaîne de caractères placée entre guillemets, contenant le mode d’ouverture du fichier, il existe 6 mode d’ouvertures standard. Mode Description r Ouvre le fichier en lecture seule. Le pointeur de position courante est placé au début du fichier. Le fichier doit exister sinon une erreur se déclenche. w Ouvre le fichier en écriture seule. Si le fichier n’existe pas, il est créé. S’il existe, il est ramené à zéro c’est à dire qu’il est vide de son contenu. a Ouvre le fichier en mode écriture pour ajout en fin de fichier (append). Lors de l’ouverture du fichier, le pointeur de position courante est placé directement en fin de fichier après le dernier octet. Si le fichier n’existe pas il est créé. r+ Ouvre le fichier en lecture/écriture. Le pointeur de position courante est placé au début du fichier. Le fichier doit exister sinon une erreur se déclenche. Ce mode permet la mise à jour des données. w+ Ouvre le fichier en lecture/écriture. Voir les contraintes du mode w qui restent les mêmes. a+ Ouvre le fichier en lecture/écriture. Si le fichier n’existe pas, il est créé. Valeurs de retour : l’adresse d’une structure FILE ou NULL en cas d’erreur. A part les fichiers textes, vous avez la possibilité de créer des fichiers binaires en ajoutant le suffixe « b » aux différents modes d’ouverture : rb+, wb, ab, etc… Ecriture de données dans un fichier int fwrite(char * buffer, int TailleUnElement, int NbElementsAEcrire, FILE * PtrFich) buffer : adresse d’une variable déclarée auparavant dans le programme et contenant les données à écrire dans le fichier. TailleUnElement : taille d’un élément à écrire dans le fichier. Il est plus simple d’utiliser la fonction sizeof( ) pour déterminer la taille d’un élément. Par exemple, sizeof( struct Personne), siezof(int), sizeof(char) etc … . NbElementsAEcrire : nombre d’éléments à écrire consécutivement dans le fichier. PtrFich : Pointeur de fichier qui pointe vers le fichier concerné. Valeurs de retour : retourne le nombre d’éléments effectivement écrits dans le fichier. Cette valeur doit être égale au nombre d’éléments demandé. Sinon elle retourne –1 en cas d’erreur. Lecture de données dans un fichier int fread(char * buffer, int TailleUnElement, int NbElementsALire, FILE * PtrFich) buffer : adresse d’une variable déclarée auparavant dans le programme qui stockera les données lues dans le fichier souhaité TailleUnElement : taille d’un élément à lire dans le fichier. Il est plus simple d’utiliser la fonction sizeof( ) pour déterminer la taille d’un élément. 2mre année BTS Informatique de gestion 2009-2010 DAIGL ARLE Lycée LES PERSEVERANTS Page 3 / 4 NbElementsALire : nombre d’éléments à lire consécutivement dans le fichier. PtrFich : Pointeur de fichier qui pointe vers le fichier concerné. Valeurs de retour : retourne le nombre d’éléments effectivement lus dans le fichier. Cette valeur doit être égale au nombre d’éléments demandé. Sinon elle retourne –1 en cas d’erreur. Déplacement dans un fichier int fseek(FILE * Ptrfich, long Déplacement, int Origine) PtrFich : Pointeur de fichier qui pointe vers le fichier concerné. Déplacement : nombre d’octets dont doit se déplacer le pointeur de position courante. Si la valeur est positive le pointeur se déplace vers l’avant sinon le pointeur se déplace en arrière. Origine : Point de départ du déplacement demandé 0 ou SEEK_SET à origine du déplacement : début du fichier 1 ou SEEK_CUR à origine du déplacement : position courante 2 ou SEEK_END à origine du déplacement : fin du fichier Valeur de retour : -1 en cas d’erreur. Exemples: fseek(Ptrfich, 0L, SEEK_SET); //se déplacer au début du fichier fseek(Ptrfich, -(long)sizeof(char), SEEK_END); //se déplacer d’une chaîne ou d’un caractère en arrière en partant de la fin du fichier fseek(Ptrfich, (long)sizeof(int), SEEK_CUR); //se déplacer d’un entier en avant Connaître la position courante dans un fichier ouvert long ftell(FILE * Ptrfich) Valeur de retour : cette fonction retourne la position courante dans le fichier. La valeur retournée correspond au nombre d’octets qui séparent le pointeur de position courante du début du fichier sinon elle retourne –1 en cas d’erreur. Fermeture d’un fichier int fclose(FILE * Ptrfich) Valeur de retour: -1 en cas d’erreur. Vider le buffer sans fermer le fichier int fflush( FILE * Ptrfich) Valeur de retour: -1 en cas d’erreur. Détection de la fin du fichier int feof(FILE * Ptrfich) Valeur de retour: 0 (zéro) si la fin du fichier n’est pas atteinte, 1 si la fin est atteinte sinon -1 en cas d’erreur 2mre année BTS Informatique de gestion 2009-2010 DAIGL ARLE Lycée LES PERSEVERANTS Page 4 / 4 Exercice 1 : Gestion d’un fichier clients Partie 1 : Ecrire un programme gérant un fichier de clients. Pour chacun d’eux on souhaite connaître le nom, le prénom et l’âge. Pour améliorer, on souhaite faire apparaître un menu qui propose : 1 : Saisir un nouveau client, pensez à indexer les clients lors de l’ajout dans le fichier. 2 : Afficher un client à On demande le nom du client souhaité puis on affiche les informations de ce client. S’il n’y a pas de client pour le nom on affiche un message d’erreur. Si le nom apparaît plusieurs fois on affiche l’ensemble des réponses. 3 : Afficher tous les clients 4 : Quitter. Partie 2 : Ecrire le même programme en mettant en place les fonctions suivantes : CreerClient( ) AfficherClient( ) AfficherTousClient( ) Quitter( ) Attention !!! Réfléchissez sur les paramètres formels et la mise en place d’un tel programme avant de commencer à coder. uploads/Litterature/ mini-projet-n02-daigl-sts21.pdf
Documents similaires










-
27
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 17, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.2500MB