Onwebcreations.Net  
Onwebcreations.Net
 
Programmation
Services Gratuits
Codes Sources
Divertissements
   

  Programmation C Haut de page

Opérations de Lecture/Ecriture dans un fichier :
Dans les accès à haut niveau sur les fichiers, distinguons encore la communication en mode chaîne (traitement individuel des octets) et la communication de données formatées (traitement des données par bloc).
Pour illustrer ceci, nous allons réaliser un carnet de contacts en C. L'application finale doit être capable d'ajouter un nombre illimité de contacts à tout moment sans effacer les enregistrements déjà présents. Il faut bien sur pouvoir visualiser tous ses contacts sous forme d'une liste avec pagination : c'es à dire qu'il ne faut afficher un maximum de 5 contacts par page.
Chaque contact doit être renseigné sur les informations suivantes :

  • Nom
  • Prénom
  • Adresse
  • Téléphone
  • Fax


Nous allons tenter de réaliser ce programme en deux versions : l'une utilisant le mode chaîne, et l'autre utilisant le mode formaté des données. Commençons par cette dernière version : le mode formaté, celui-ci étant plus facile, mais limité, vous allez le voir..

Traitement Formaté des données :
Nous allons stocker nos informations dans une variable de tableau, dont les éléments sont de type structure. Cette application se compose de deux programmes : l'un permettant d'ajouter des contacts(programme6.exe), et l'autre permettant de visualiser la liste des contacts(programme7.exe).
L'écriture des données est possible par l'instruction suivante :
fwrite(<VAR>, <taille>, <nombre>, <pointeur fichier>);

  • <VAR> : Données à écrire. Dans le cas présent, il s'agit d'un tableau dont les éléments sont structurés selon la structure CONTACT
  • <taille> : Taille d'un élément en octets. Dans le cas présent, il s'agit de la taille d'un élément du tableau. La fonction sizeof(); permet de nous calculer l'occupation mémoire à notre place.
  • <nombre> : Nombre d'éléments à écrire dans le fichier. Dans le cas présent, on veut écrire la totalité des éléments du tableau dans le fichier. Mais vous pouvez aussi bien n'écrire qu'un nombre limité d'éléments. par exemple, le premier uniquement, mettez la valeur numérique 1
  • <pointeur fichier> : Il s'agit du fichier dans lequel la fonction fwrite(); doit écrire ses données, désigné par le pointeur fichier. voir le chapitre précédent pour plus de précisions à propos du pointeur fichier.

Il s'agit de la seule nouveauté dans ce programme, toutes les autres instructions C sont décrites dans les chapitres précédents.
Voici le programme6.exe :

 

#include <stdio.h>
#include <system.h> // pour getche();

main()
{

//+------------------------------+
//| Déclaration de la structure  |
//| CONTACT                      |
//+------------------------------+
struct CONTACT
{
char nom[20];
char prenom[20];
char adresse[20];
char telephone[15];
char fax[15];
} TabContacts[50];

//+------------------------------+
//| Déclarations de variables    |
//+------------------------------+
FILE *fp;
int c,i;

c = 49;
i = 0;

while(c==49 && i<10)
{
//+------------------------------+
//| Affichage du formulaire      |
//+------------------------------+
printf("\n+-------------------------------------------------------------------+");
printf("\n| Editer votre liste de contacts (ecrase les anciennes donnees)     |");
printf("\n+-------------------------------------------------------------------+");

printf("\n\nNom : \t\t");
scanf("%s",TabContacts[i].nom);

printf("\nPrenom : \t");
scanf("%s",TabContacts[i].prenom);

printf("\nAdresse : \t");
scanf("%s",TabContacts[i].adresse);

printf("\nTELEPHONE : \t");
scanf("%s",TabContacts[i].telephone);

printf("\nFAX : \t\t");
scanf("%s",TabContacts[i].fax);


printf("\n\nAppuyez sur 1 pour ajouter un nouveau contact");
printf("\nAppuyez sur n'importe quelle autre touche pour quitter");
printf("\nVotre choix : \t");
i++;
c = getche();
}

//+------------------------------+
//| Ecriture des données         |
//+------------------------------+
fp = fopen("data.dat","w+");
fwrite(TabContacts, sizeof(struct CONTACT), i, fp);
fclose(fp);
printf("\n\n\tContacts enregistres avec succes !\n\n");

printf("\n > Appuyez sur une touche pour fermer l'application");
getche();
}


Voici un exemple de déroulement de ce programme :

Nous avons procédé à une inscription, puis entré la valeur 1 pour inscrire une seconde personne. Nous pouvons inscrire de cette façon jusqu'a 50 personnes au maximum. La raison de cette limitation est simple : la variable de tableau dont les éléments de type structurés occupent 90 octets chacun, soit un total de 90*50=4500 octets. Les ressources n'étant pas infinies, nous ne pouvons pas inscrire de contacts infiniment.
En effet, nous stockons temporairement l'ensemble des données dans un tableau puis, écrivons l'ensemble des données lorsque l'utilisateur ne souhaite plus inscrire de nouveaux contacts. De cette manière, notre première contrainte nous imposant un nombre illimité de contacts n'est pas respectée !
De plus, les précédents contacts, déjà présents seront écrasés lors de la nouvelle opération d'écriture. C'est à dire que dans le cas présent, nous venons d'effacer les anciens enregistrements et d'écrire ces deux contacts (Tintin et Toto). En effet, le mode d'ouverture utilisé est W+, du fait qu'il est impossible de lire correctement les données ajoutées ultérieurement en mode ajout A. En tout cas, cela échoue sous le compilateur Miracle C. La seconde contrainte n'est pas respectée !



[ << Page précédente | Page suivante >> ]


 
    Haut de page
© Onwebcreations.Net : Programmation & Services Internet
Accessible aussi par : Services-Gratuits-Webmasters.com
Contacter le suppport technique
Internaute(s) actuellement sur le site.