Supprimer une structure dans un fichier

Fermé
Rag - 16 janv. 2010 à 20:04
mamiemando Messages postés 33642 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 avril 2025 - 17 janv. 2010 à 03:04
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);
*/
}
A voir également:

1 réponse

mamiemando Messages postés 33642 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 avril 2025 7 844
17 janv. 2010 à 03:04
Fort bien, mais quelle structure veux-tu supprimer ? Et comment envisages tu de la remplacer ? Car il va falloir arranger ou supprimer toutes les fonctions dans lesquelles la structure apparaît.

Bonne chance
0