Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1970 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] Recuperation des données à partir d'un fichier !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Recuperation des données à partir d'un fichier !

n°228857
albino13
Against TCPA // Palladium
Posté le 16-10-2002 à 18:06:48  profilanswer
 

je refait un petit post histoire de bien remettre mes idées au plat pour etre bien compris...
 
voila j'ai cette structure
 

Code :
  1. struct sclient
  2. {
  3.   int numCli;
  4.   char nomCli[40];
  5.   char adresseCli[50];
  6.   char villeCli[20];
  7.   int cpCli;
  8.   char telCli[10];
  9. }client;

 
a un moment dans mon programme je demande a l'utilisateur de saisir le numero client
 

Code :
  1. void fclientMAJ(void)
  2. {
  3.   int b,numRepC,rep,cp;
  4.   char nom[40],adr[50],vil[20],tel[10];
  5.   FILE *fclient;
  6.   if((fclient=fopen("client.dat","a" ))==NULL)
  7.     {
  8.       puts("Erreur" );
  9.       getch();
  10.     }
  11.     else
  12.     {
  13.     do
  14.     {
  15.       clrscr();
  16.       puts("Numero de client:" );
  17.       scanf("%d",&b);
  18.       numRepC=fverifNumCli(b);
  19.       if(numRepC==-1)
  20.         {
  21.           puts("Une erreure c'est produite..." );
  22.           rep='n';
  23.           getch();
  24.         }
  25.         else if (numRepC==0)
  26.         {
  27.           flushall();
  28.           client.numCli=b;

 
donc on peut voir que je fais appel a une fonction, la voici :
 

Code :
  1. int fverifNumCli(int sNumCli)
  2. {
  3.   FILE *fclient;
  4.   int repv;
  5.   if ((fclient=fopen("client.dat","r" ))==NULL)
  6.     repv=-1;
  7.     else
  8.     {
  9.       do
  10.       {
  11.         if(client.numCli==sNumCli)
  12.           repv=1;
  13.             else
  14.               repv=0;
  15.       }
  16.       while (fread(&client,sizeof(struct sclient),1,fclient),!feof(fclient));
  17.     }
  18. return repv;
  19. }

 
tout se passe bien, j'aimerais simplement qu'en plus de dire si ce numCli existe deja qu'il me renvoi la derniere valeur (en somme la plus haute valeur) de numCli comme ca l'utilisateur s'il ne sais pas quel est le numCli le plus grand n'auras pas à essayé jusqu'a temps de trouver le bon numCli....

mood
Publicité
Posté le 16-10-2002 à 18:06:48  profilanswer
 

n°228871
albino13
Against TCPA // Palladium
Posté le 16-10-2002 à 18:21:33  profilanswer
 

Dite moi ce que vous en pensez (certe j'y arrive mais pas comme je le pensais au depart...)
 

Code :
  1. void fclientMAJ(void)
  2. {
  3.   int b,numRepC,rep,cp;
  4.   char nom[40],adr[50],vil[20],tel[10];
  5.   FILE *fclient;
  6.   if((fclient=fopen("client.dat","a" ))==NULL)
  7.     {
  8.       puts("Erreur" );
  9.       getch();
  10.     }
  11.     else
  12.     {
  13.     do
  14.     {
  15.       clrscr();
  16.       puts("Numero de client:" );
  17.       scanf("%d",&b);
  18.       numRepC=fverifNumCli(b);
  19.       if(numRepC==-1)
  20.         {
  21.           puts("Une erreure c'est produite..." );
  22.           rep='n';
  23.           getch();
  24.         }
  25.         else if (numRepC==0)
  26.         {
  27.           flushall();
  28.           client.numCli=b;
  29.           puts("Nom client:" );
  30.           scanf("%[^\n]",&nom);
  31.           strncpy(client.nomCli,nom,40);
  32.           flushall();
  33.           puts("Adresse:" );
  34.           scanf("%[^\n]",&adr);
  35.           strncpy(client.adresseCli,adr,50);
  36.           flushall();
  37.           puts("Ville :" );
  38.           scanf("%[^\n]",&vil);
  39.           strncpy(client.villeCli,vil,20);
  40.           flushall();
  41.           puts("Code postal :" );
  42.           scanf("%d",&cp);
  43.           client.cpCli=cp;
  44.           flushall();
  45.           puts("Telephone :" );
  46.           scanf("%s",&tel);
  47.           strncpy(client.telCli,tel,10);
  48.           fwrite(&client,sizeof(struct sclient),1,fclient);
  49.           flushall();
  50.           puts("Desirez vous poursuivre les enregistrements? o/n" );
  51.           scanf("%c",&rep);
  52.         }
  53.         else
  54.         {
  55.           puts("Ce numero client existe deja...\n" );
  56.           printf("Le prochain numero client est : %d\n",(numRepC+1));
  57.           //pouvoir ecrire quel est le prochain Numero clients dispo...
  58.           puts("Desirez vous poursuivre les enregistrements? o/n" );
  59.           scanf("%c",&rep);
  60.           getch();
  61.         }
  62.     }while(rep=='o');
  63.     }
  64.   fclose(fclient);
  65.   fmenuClient();
  66. }

 
 

Code :
  1. int fverifNumCli(int sNumCli)
  2. {
  3.   FILE *fclient;
  4.   int repv,max;
  5.   max=0;
  6.   if ((fclient=fopen("client.dat","r" ))==NULL)
  7.     repv=-1;
  8.     else
  9.     {
  10.       do
  11.       {
  12.         if(client.numCli==sNumCli)
  13.           do
  14.           {
  15.             if(client.numCli>max)
  16.             {
  17.               max=client.numCli;
  18.               repv=max;
  19.             }
  20.           }
  21.           while (fread(&client,sizeof(struct sclient),1,fclient),!feof(fclient));
  22.             else
  23.               repv=0;
  24.       }
  25.       while (fread(&client,sizeof(struct sclient),1,fclient),!feof(fclient));
  26.     }
  27. return repv;
  28. }

n°231872
nicolasm
Posté le 21-10-2002 à 15:59:25  profilanswer
 

albino13 a écrit a écrit :

Dite moi ce que vous en pensez (certe j'y arrive mais pas comme je le pensais au depart...)
 

Code :
  1. typedef struct ma_struct
  2.   {
  3.   int num_demande;
  4.   int num_max;
  5.   }ma_struct;
  6. ma_struct miam; /* var global */

 
 

Code :
  1. void fverifNumCli(int sNumCli)
  2. {
  3.   FILE *fclient;
  4.   int repv,max;
  5.   max=0;
  6.   if ((fclient=fopen("client.dat","r" ))==NULL)
  7.     repv=-1;
  8.     else
  9.     {
  10.       do
  11.       {
  12.         if(client.numCli==sNumCli)
  13.           do
  14.           {
  15.             if(client.numCli>max)
  16.             {
  17.               max=client.numCli;
  18.               repv=max;
  19.             }
  20.           }
  21.           while (fread(&client,sizeof(struct sclient),1,fclient),!feof(fclient));
  22.             else
  23.               repv=0;
  24.       }
  25.       while (fread(&client,sizeof(struct sclient),1,fclient),!feof(fclient));
  26.     }
  27. miam.num_demande=repv;
  28. miam.num_max= <--- ta valeur maximale
  29. return;
  30. }

 




Message édité par nicolasm le 21-10-2002 à 15:59:54
n°232660
sombresong​e
Posté le 22-10-2002 à 21:36:14  profilanswer
 

Je comprend pas pkoi tu réouvre le fichier dans ta fonction fverifnum alors que tu l'as déjà ouvert précédemment tu pourais ptet passer ton FILE* en parametre. Sinon je comprend pas non plus pkoi tu fais scanf("%[\n]",&balblabla) tu connais pas scanf("%s",&blablabla)? ou si tu veux garder les espace t'as gets qui fait pareil.
Sinon je crois pas que ca veuille dire koike ce soit ça:

Code :
  1. while (fread(&client,sizeof(struct sclient),1,fclient),!feof(fclient));


Pour ta question t'as qu'à garder dans une variable temporaire le numcli max et tu l'update quand t'en trouve un plus grand...
 
Pour finir à koi sert ton programe? Si t'as besoin de gerer une base de donné de client pourquoi le faire en C alors que ya des trucs plus sympa pour ce genre de probleme genre sql

n°232765
albino13
Against TCPA // Palladium
Posté le 23-10-2002 à 06:20:49  profilanswer
 

sombresonge a écrit a écrit :

Je comprend pas pkoi tu réouvre le fichier dans ta fonction fverifnum alors que tu l'as déjà ouvert précédemment tu pourais ptet passer ton FILE* en parametre. Sinon je comprend pas non plus pkoi tu fais scanf("%[\n]",&balblabla) tu connais pas scanf("%s",&blablabla)? ou si tu veux garder les espace t'as gets qui fait pareil.(<= a premiere vu gets ne marche pas avec strncpy donc je suis passé par cette methode et oui c'est exactement pour conserver les espaces)
Sinon je crois pas que ca veuille dire koike ce soit ça:

Code :
  1. while (fread(&client,sizeof(struct sclient),1,fclient),!feof(fclient));


(<= alors je pense que ca veut bien dire qqchose vu que ca fonctionne tres bien dans d'autres fonctions mais je v te dire ce que je pense que ca veut dire...
alors fread= lit mon fichier. fread prend comme premiere valeur ma variable, ici &client qui correspond a la variable de ma struccture (=> structure ici =>struct sstock
{
  int numProd;
  char PU[7];
  char des[40];
  int stockMin;
  int stockActu;
} stock;
))
apres fread dois savoir que quel type dois etre stock dc sizeof et comme c''est une structure je lui dit (sizeof(nomMaStructure)
ensuite le nombre d'enregistrements qu'il dois lire a la fois ici 1, tout ceci il le lira dans le fichier concerné... ici le pointeur sur mon fichier (declaré dans FILE *NomFichier)
puis vu que c'est un while je lui donne la condition de fin ou pour etre plus precis la condition qui va ke faire continuer ici tant que feof(fclient) n'est pas vrai donc tant que je n'ai pas atteint la fin de fclient...
Biensur je suis nouveau donc je suis tres tres loin de tout savoir mais je ne fais que transposer ce que l'on m'apprend en cour donc si toi ou qqn d'autre a une autre proposition ou correction je suis preneur ;)  
 
 
Pour ta question t'as qu'à garder dans une variable temporaire le numcli max et tu l'update quand t'en trouve un plus grand...
 
Pour finir à koi sert ton programe? Si t'as besoin de gerer une base de donné de client pourquoi le faire en C alors que ya des trucs plus sympa pour ce genre de probleme genre sql(<= je suis entierement d'accord avec toi mais c'est pour une AP que je devrais presenter a mon examen de fin d'année... )



[i][/i]  [i][/i] [cpp]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] Recuperation des données à partir d'un fichier !

 

Sujets relatifs
Récupération du OutputStream d'un Process[ASP] affichage de certaine ligne d un fichier XLS
[flash] importer un fichier texte et redimentionner la zone automatiquLecture d'un fichier audio
Comment faire une recherche dans un fichier et l'éditer?[PHP] Création de variables dans une boucle et récupération?[Règlé]
comment savoir si un fichier est deja ouvert en VBA[JS] Recuperation des coordonnees d'un clic de souris sous Mozilla
Lire un fichier de conf en C++[Projet Perso][C++] Infos sur le fichier de map de Wolfenstein3D...
Plus de sujets relatifs à : [C] Recuperation des données à partir d'un fichier !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR