rag_ | 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 :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define FFL fflush(stdin)
- struct ordinateur
- {
- char type_proc[20];
- char vitesse_proc[20];
- char ram[20];
- char HD[20];
- char annee[20];
- };
- struct carnet
- {
- struct ordinateur nbpc[50];
- int compteur;
- };
- void saisie(FILE*fichier,/*FILE*fichieran,*/struct ordinateur *pc);
- void saisieannee(FILE*fichier,/* FILE*fichieran, */struct ordinateur *pc);
- void affichage(FILE*fichier);
- void suppression(FILE*fichier/*, struct ordinateur *pc*/);
- int main(void)
- {
- FILE*fichier=NULL;
- fichier=fopen("ordinateur.lst","a" );
- struct ordinateur pc;
- int option;
- do
- {
- printf("\tMenu" );
- 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." );
- scanf("%d",&option);
- switch (option)
- {
- case 1:
- saisie(fichier/*,fichieran*/,&pc);
- break;
- case 2:
- saisieannee(fichier/*,fichieran*/,&pc);
- break;
- case 3:
- affichage(fichier);
- break;
- case 4:
- suppression(fichier/*,&pc*/);
- break;
- }
- }while (1);
- return 0;
- }
- void saisie(FILE*fichier/*,FILE*fichieran*/, struct ordinateur *pc)
- {
- if (fichier==NULL)
- puts("probleme a l'ouverture du fichier" );
- else
- {
- fichier=fopen("ordinateur.lst","a" );
- FFL;
- puts("quelle est l'annee d'achat" );
- FFL;
- gets((*pc).annee);
- fprintf(fichier, "annee d'achat: %s\n", (*pc).annee);
- FFL;
- puts("quelle est le type du processeur" );
- FFL;
- gets((*pc).type_proc);
- fprintf(fichier, "type processeur: %s\n", (*pc).type_proc);
- puts("quelle est la vitesse du processeur" );
- FFL;
- gets((*pc).vitesse_proc);
- fprintf(fichier, "vitesse proc: %s\n", (*pc).vitesse_proc);
- FFL;
- puts("quelle est la taille de la memoire vive" );
- FFL;
- gets((*pc).ram);
- fprintf(fichier, "taille ram: %s\n", (*pc).ram);
- FFL;
- puts("quelle est la taille du disque dur" );
- FFL;
- gets((*pc).HD);
- fprintf(fichier, "taille du disque dur: %s\n", (*pc).HD);
- fclose(fichier);
- }
- }
- void saisieannee(FILE*fichier/*,FILE*fichieran*/,struct ordinateur *pc)
- {
- char chaine[5000] = "";
- fichier=fopen("ordinateur.lst","r" );
- if (fichier != NULL)
- {
- while (fgets(chaine, 5000, fichier) != NULL)
- {
- printf("%s", chaine);
- }
- fclose(fichier);
- }
- char year[5];
- char date[20];
- FFL;
- puts("entrez la date" );
- gets(date);
- char ordi[20]="ordi";
- char nfichier[20];
- char lst[6]=".lst";
- strcpy(nfichier,ordi);
- strcat(nfichier,date);
- strcat(nfichier,lst);
- printf("le nom du fichier est: %s\n",nfichier);
- if (strcmp(date,(*pc).annee)==0)
- {
- fichier=fopen(nfichier,"a" );
- fprintf(fichier, "annee d'achat: %s\n", (*pc).annee);
- fprintf(fichier, "type processeur: %s\n", (*pc).type_proc);
- fprintf(fichier, "vitesse proc: %s\n", (*pc).vitesse_proc);
- fprintf(fichier, "taille ram: %s\n", (*pc).ram);
- fprintf(fichier, "taille du disque dur: %s\n", (*pc).HD);
- fclose(fichier);
- }
- }
- void affichage(FILE*fichier)
- {
- char name[20];
- int caractuel = 0;
- puts("quel fichier voulez vous ouvrir(tapez le nom exact)" );
- FFL;
- gets(name);
- fichier = fopen(name,"r" );
- if (fichier != NULL)
- {
- do
- {
- caractuel = fgetc(fichier);
- printf("%c", caractuel);
- }
- while (caractuel != EOF);
- fclose(fichier);
- }
- }
- void suppression(FILE*fichier/*,struct ordinateur *pc*/)
- {
- int caractereActuel = 0;
- char chaine[2000];
- char year[20];
- FILE*fichier2;
- fichier = fopen("ordinateur.lst", "r" );
- /* puts("quelle est l'annee d'achat de l'ordinateur a supprimer?" );
- FFL;
- gets(year);
- printf("l'annee d'achat du pc a supprimer est: %s",year);
- */
- fichier2=fopen("tempo.lst","w" );
- char ligne[256];
- int i=0;
- /*fgets(ligne, sizeof ligne, fichier);
-
- printf("%s\n",ligne);
- if (strcmp(year,(*pc).annee)==0)
- {
- fputs(ligne, fichier2);
-
- } */
- /* while (fgets(ligne, sizeof ligne, fichier))
- {
- if (ligne[15] != '\n')
- {
- // ligne[0]=" ";
-
- fputs(ligne, fichier2);
- } }
-
- */
- struct ordinateur pc;
- rewind(fichier);
- while(fread(&pc,sizeof(pc),1,fichier) && !feof(fichier))
- {
- if(strcmp(pc.annee,"1999" )==0)
- {
- fwrite(&pc,sizeof(pc),1,fichier2);
- }
- }
- fclose(fichier);
- fclose(fichier2);
- /*
- char chaine[20000] = "";
- char year[5];
- fgets(chaine, TAILLE_MAX, fichier);
- printf("%s", chaine);
- fseek(f, 0L, SEEK_SET);
- for(i = 0; i < year; i++)
- getc(f);
- */
- }
|
Message édité par rag_ le 16-01-2010 à 18:44:03
|