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

  FORUM HardWare.fr
  Programmation
  C

  suppression structure dans fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

suppression structure dans fichier

n°1958380
rag_
Posté le 16-01-2010 à 18:34:53  profilanswer
 

Bonjour,
Je souhaite simplement supprimer une structure dans un fichier. Mais je n'ai aucune idée de comment faire.
 
J'ai vaguement essayé de faire quelque chose, j'arrive a supprimer une ligne. Mais pas une structure complete.(ce qu'il y a actuellement dans la fonction ne marche pas, je tâtonnais pour trouver la solution).

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define FFL fflush(stdin)
  5. struct ordinateur
  6. {
  7.     char type_proc[20];
  8.     char vitesse_proc[20];
  9.     char ram[20];
  10.     char HD[20];
  11.     char annee[20];
  12. };
  13. struct carnet
  14. {
  15.     struct ordinateur nbpc[50];
  16.     int compteur;
  17. };
  18. void saisie(FILE*fichier,/*FILE*fichieran,*/struct ordinateur *pc);
  19. void saisieannee(FILE*fichier,/* FILE*fichieran, */struct ordinateur *pc);
  20. void affichage(FILE*fichier);
  21. void suppression(FILE*fichier/*, struct ordinateur *pc*/);
  22. int main(void)
  23. {
  24.     FILE*fichier=NULL;
  25.     fichier=fopen("ordinateur.lst","a" );
  26.     struct ordinateur pc;
  27.     int option;
  28.     do
  29.     {
  30.         printf("\tMenu" );
  31.         printf("1: Saisie des caracteristiques d'un ordinateur.\n2: Tri des ordinateurs en fonction des annees.\n3: Affichage d'un des fichiers.\n4: Supprimer un ordinateur d'une liste." );
  32.         scanf("%d",&option);
  33.         switch (option)
  34.         {
  35.         case 1:
  36.             saisie(fichier/*,fichieran*/,&pc);
  37.             break;
  38.         case 2:
  39.             saisieannee(fichier/*,fichieran*/,&pc);
  40.             break;
  41.         case 3:
  42.             affichage(fichier);
  43.             break;
  44.         case 4:
  45.             suppression(fichier/*,&pc*/);
  46.             break;
  47.         }
  48.     }while (1);
  49.     return 0;
  50. }
  51. void saisie(FILE*fichier/*,FILE*fichieran*/, struct ordinateur *pc)
  52. {
  53.     if (fichier==NULL)
  54.         puts("probleme a l'ouverture du fichier" );
  55.     else
  56.     {
  57.         fichier=fopen("ordinateur.lst","a" );
  58.         FFL;
  59.         puts("quelle est l'annee d'achat" );
  60.         FFL;
  61.         gets((*pc).annee);
  62.         fprintf(fichier, "annee d'achat: %s\n", (*pc).annee);
  63.         FFL;
  64.         puts("quelle est le type du processeur" );
  65.         FFL;
  66.         gets((*pc).type_proc);
  67.         fprintf(fichier, "type processeur: %s\n", (*pc).type_proc);
  68.         puts("quelle est la vitesse du processeur" );
  69.         FFL;
  70.         gets((*pc).vitesse_proc);
  71.         fprintf(fichier, "vitesse proc: %s\n", (*pc).vitesse_proc);
  72.         FFL;
  73.         puts("quelle est la taille de la memoire vive" );
  74.         FFL;
  75.         gets((*pc).ram);
  76.         fprintf(fichier, "taille ram: %s\n", (*pc).ram);
  77.         FFL;
  78.         puts("quelle est la taille du disque dur" );
  79.         FFL;
  80.         gets((*pc).HD);
  81.         fprintf(fichier, "taille du disque dur: %s\n", (*pc).HD);
  82.         fclose(fichier);
  83.     }
  84. }
  85. void saisieannee(FILE*fichier/*,FILE*fichieran*/,struct ordinateur *pc)
  86. {
  87.     char chaine[5000] = "";
  88.     fichier=fopen("ordinateur.lst","r" );
  89.     if (fichier != NULL)
  90.     {
  91.         while (fgets(chaine, 5000, fichier) != NULL)
  92.         {
  93.             printf("%s", chaine);
  94.         }
  95.         fclose(fichier);
  96.     }
  97.     char year[5];
  98.     char date[20];
  99.     FFL;
  100.     puts("entrez la date" );
  101.     gets(date);
  102.     char ordi[20]="ordi";
  103.     char nfichier[20];
  104.     char lst[6]=".lst";
  105.     strcpy(nfichier,ordi);
  106.     strcat(nfichier,date);
  107.     strcat(nfichier,lst);
  108.     printf("le nom du fichier est: %s\n",nfichier);
  109.     if (strcmp(date,(*pc).annee)==0)
  110.     {
  111.         fichier=fopen(nfichier,"a" );
  112.         fprintf(fichier, "annee d'achat: %s\n", (*pc).annee);
  113.         fprintf(fichier, "type processeur: %s\n", (*pc).type_proc);
  114.         fprintf(fichier, "vitesse proc: %s\n", (*pc).vitesse_proc);
  115.         fprintf(fichier, "taille ram: %s\n", (*pc).ram);
  116.         fprintf(fichier, "taille du disque dur: %s\n", (*pc).HD);
  117.         fclose(fichier);
  118.     }
  119. }
  120. void affichage(FILE*fichier)
  121. {
  122.     char name[20];
  123.     int caractuel = 0;
  124.     puts("quel fichier voulez vous ouvrir(tapez le nom exact)" );
  125.     FFL;
  126.     gets(name);
  127.     fichier = fopen(name,"r" );
  128.     if (fichier != NULL)
  129.     {
  130.         do
  131.         {
  132.             caractuel = fgetc(fichier);
  133.             printf("%c", caractuel);
  134.         }
  135.         while (caractuel != EOF);
  136.         fclose(fichier);
  137.     }
  138. }
  139. void suppression(FILE*fichier/*,struct ordinateur *pc*/)
  140. {
  141.     int caractereActuel = 0;
  142.     char chaine[2000];
  143.     char year[20];
  144. FILE*fichier2;
  145.     fichier = fopen("ordinateur.lst", "r" );
  146.    /* puts("quelle est l'annee d'achat de l'ordinateur a supprimer?" );
  147.     FFL;
  148.     gets(year);
  149.     printf("l'annee d'achat du pc a supprimer est: %s",year);
  150. */
  151.    fichier2=fopen("tempo.lst","w" );
  152.     char ligne[256];
  153.     int i=0;
  154.     /*fgets(ligne, sizeof ligne, fichier);
  155.         printf("%s\n",ligne);
  156.         if (strcmp(year,(*pc).annee)==0)
  157.         {
  158.             fputs(ligne, fichier2);
  159.         }   */
  160.            /* while (fgets(ligne, sizeof ligne, fichier))
  161.     {
  162.         if (ligne[15] != '\n')
  163.         {
  164.           //  ligne[0]=" ";
  165.             fputs(ligne, fichier2);
  166.     }   }
  167. */
  168. struct ordinateur pc;
  169. rewind(fichier);
  170. while(fread(&pc,sizeof(pc),1,fichier) && !feof(fichier))
  171. {
  172. if(strcmp(pc.annee,"1999" )==0)
  173. {
  174. fwrite(&pc,sizeof(pc),1,fichier2);
  175. }
  176. }
  177. fclose(fichier);
  178. fclose(fichier2);
  179.     /*
  180.     char chaine[20000] = "";
  181.     char year[5];
  182.     fgets(chaine, TAILLE_MAX, fichier);
  183.     printf("%s", chaine);
  184.     fseek(f, 0L, SEEK_SET);
  185.     for(i = 0; i < year; i++)
  186.     getc(f);
  187. */
  188. }


Message édité par rag_ le 16-01-2010 à 18:44:03
mood
Publicité
Posté le 16-01-2010 à 18:34:53  profilanswer
 

n°1958398
gilou
Modérateur
Modzilla
Posté le 16-01-2010 à 21:58:24  profilanswer
 

Une remarque en passant:

Citation :

define FFL fflush(stdin)

:heink:  

Citation :

fflush(stdin);
 
Will compile but its behavior is undefined by the ANSI C standard. The fflush() function is only meant to be used on streams open for output, not input. Both fflush(stdin) and fflush(NULL), in some C libraries, flush stdout and stderr, but this is completely unportable! Thus, it should not be used.


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1958401
rag_
Posté le 16-01-2010 à 22:52:29  profilanswer
 

J'avais pris ca d'une correction d'exercice que j'avais lu

n°1959509
Nethacker
rule televisions, rule minds
Posté le 21-01-2010 à 20:01:20  profilanswer
 

Si t'avais mis un tableau de structures, ça aurait été plus facile de faire des opérations et après mettre à jour le fichier.
 
Dans ton exemple, on ne peut définir un ordinateur par son année, vu que plusieurs vont avoir la même ce qui entrainera leurs suppressions tous, ou la premier "ordinateur" trouvé si tu mets un break dans ta boucle.
 
Donc, ce que je propose c'est de travailler sur un tableau dynamique de structures.
 
Et sinon tu peux garder ton code mais attribuer à chaque ordinateur un numéro d'identification unique, pour après copier dans le nouveau fichier, toutes les entrées précedentes sauf celui ayant ce numéro.


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

  suppression structure dans fichier

 

Sujets relatifs
[C] Ecriture dans un fichier[SHELL] Connexion base DB2 + lancement requête dans fichier .sql
recuperer la taille d'un fichier distantSignature et Cryptage fichier XML avec php
[VBA] Ajouter une ligne à un fichier Word à partir de cellules ExcelEnregistrer fichier deja ouvert
Editer un fichier XML sous windowsConstruction d'un fichier
Substitution de texte dans un fichier docx en utilisant Apache POI 
Plus de sujets relatifs à : suppression structure dans fichier


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