Supprimer une structure dans un fichier
Bonjour,
je souhaite simplement supprimer toute une structure d'un fichier, mais je n'y arrive pas.
Voila mon code, j'ai essayé un truc mais ca fonctionne pas super bien
Code C:
#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;
rewind(fichier);
while (fread(&(*pc),sizeof(struct ordinateur),1,fichier) && !feof(fichier))
{
if (strcmp((*pc).annee,"1999")==0)
{
fseek(fichier,sizeof(struct ordinateur),SEEK_CUR);
}
fwrite(&(*pc),sizeof(struct ordinateur),1,fichier2);
}
fclose(fichier);
fclose(fichier2);
/*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);
} }
/*
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);
*/
}
je souhaite simplement supprimer toute une structure d'un fichier, mais je n'y arrive pas.
Voila mon code, j'ai essayé un truc mais ca fonctionne pas super bien
Code C:
#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;
rewind(fichier);
while (fread(&(*pc),sizeof(struct ordinateur),1,fichier) && !feof(fichier))
{
if (strcmp((*pc).annee,"1999")==0)
{
fseek(fichier,sizeof(struct ordinateur),SEEK_CUR);
}
fwrite(&(*pc),sizeof(struct ordinateur),1,fichier2);
}
fclose(fichier);
fclose(fichier2);
/*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);
} }
/*
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);
*/
}
A voir également:
- Supprimer une structure dans un fichier
- Supprimer rond bleu whatsapp - Guide
- Fichier bin - Guide
- Comment ouvrir un fichier epub ? - Guide
- Impossible de supprimer un fichier - Guide
- Comment réduire la taille d'un fichier - Guide