Accueil > Forum > > > > suppression d'une structure dans un fichier
suppression d'une structure dans un fichier
samedi 16 janvier 2010 à 19:18:32 |
suppression d'une structure dans un fichier

ragon
|
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/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);
*/
}
|
|
dimanche 17 janvier 2010 à 19:29:08 |
Re : suppression d'une structure dans un fichier

rt15
|
Salut,
Je n'ai pas lu ton code, mais on ne peut pas vraiment supprimer dans un fichier (Avec du code standard).
Il faut par exemple lire le fichier, le fermer, puis l'ouvrir en w+ et tout réécrire dedans, puis le refermer. Ou, plus sûr, utiliser un fichier intermédiaire : Tu lis le fichier, tu écris dans un autre fichier. Quand tu as fini d'écrire, tu supprime le premier fichier et renomme le second du même nom que le premier.
|
|
dimanche 17 janvier 2010 à 19:37:37 |
Re : suppression d'une structure dans un fichier

rt15
|
Ah heu c'est ce que tu as essayé de faire on dirait.
Ca à l'air pas trop mal, mais pourquoi faire le fseek ? fread revient à faire un fseek. Donc là, tu supprime l'enregistrement suivant celui que tu veux supprimer.
D'autre part :
"&(*pc)" est équivalent à "pc".
Et "(*pc)." est souvent écrit "pc->".
Plutôt quelque chose comme ça :
Code C/C++ : while (!feof(fichier) && fread(pc,sizeof(struct ordinateur),1,fichier))
{
if (strcmp(pc->annee,"1999"))
{
fwrite(pc,sizeof(struct ordinateur),1,fichier2);
}
}
|
|
mardi 19 janvier 2010 à 20:53:54 |
Re : suppression d'une structure dans un fichier

ragon
|
Bonsoir,
en fait j'ai longuement cherché, et je n'ai reussi qu'a faire ca:
Code C/C++ : void suppression(struct ordinateur *pc)
{
FILE*fichier=NULL;
int caractereActuel = 0;
char chaine[2000];
char year[20];
FILE*fichier2=NULL;
fichier = fopen("ordinateur.lst", "r");
fichier2=fopen("tempo.lst","w");
printf("\n\n");
rewind(fichier);
char chaine2[200];
char chaine3[200];
char chaine4[200];
char chaine5[200];
int i=15;
fgets(chaine, 2000, fichier);
int ouinon =0;
char chaine7[200];
int sortie=0;
printf("%s",chaine);
do
{
{
fgets(chaine2, 2000, fichier);
printf("%s",chaine2);
fgets(chaine3, 2000, fichier);
printf("%s",chaine3);
fgets(chaine4, 2000, fichier);
printf("%s",chaine4);
fgets(chaine5, 2000, fichier);
printf("%s",chaine5);
puts("est ce la machine que vous souhaitez supprimer ?1 pour oui, 0 pour non");
scanf("%d",&ouinon);
while (ouinon==0)
{
if (ouinon==0)
{
fputs(chaine,fichier2);
fputs(chaine2,fichier2);
fputs(chaine3,fichier2);
fputs(chaine4,fichier2);
fputs(chaine5,fichier2);
fputs(chaine7,fichier2);
fgets(chaine2, 2000, fichier);
printf("%s",chaine2);
fgets(chaine3, 2000, fichier);
printf("%s",chaine3);
fgets(chaine4, 2000, fichier);
printf("%s",chaine4);
fgets(chaine5, 2000, fichier);
printf("%s",chaine5);
fgets(chaine7, 2000, fichier);
printf("%s",chaine7);
puts("est ce la machine que vous souhaitez supprimer ?1 pour oui, 0 pour non");
scanf("%d",&ouinon);
} }
}
puts("sortir ?1oui 0non");
scanf("%d",&sortie);
}
while (sortie==0);
printf("\n\n");
char chaine6[2000];
while (fgets(chaine6, 2000, fichier) != NULL)
{
printf("%s", chaine6);
fputs(chaine6,fichier2);
}
fclose(fichier);
fclose(fichier2);
}
Je vais essayer ce soir avec ta méthode parce que la mienne est une vraie usine a gaz. Cela dit elle fonctionne quand meme...
En revanche j'ai un problème pour la fonction saisieannee. Je souhaite qu'elle trie toutes les structures du fichier "ordinateur.lst", mais je vois pas trop comment faire non plus, parce qu'actuellement je ne range que la toute derniere structure rentrée.
|
|
Cette discussion est classée dans : fichier, pc, file, ordinateur, char
Répondre à ce message
Sujets en rapport avec ce message
Erreurs de compilations bizarres avec Visual C++ 6 [ par VTS_35 ]
Bonjour,G encore des problèmes de compilation avec mon programme. Je me suis rendu compte que le programme allait devenir balaise, alors j'ai décidé d
Problème copie de fichier.... [ par Clonk ]
Bonjour,Je voudrais copier un fichier texte dans mon appli, j'ai fais la fonction suivante://Copie d'un fichier (création du backup)int copier(char *
modifier un mot dans un fichier [ par krusty24 ]
bonjour tout le mondele but de mon programme est de modifier un mot dans un fichier.exemple de fichier:2,3 4,5 6.7 8,91.3 2,4 5.7 6,8par exemple je
cherchet afficher un ou plusieurs ligne d'une fichier texte . [ par brell ]
bon jour! cette fonction a comme parametre fichier contenant les messages et une chaine de caracteres contenant le destinateur. cette fonction permet
enregister un fichier depuis les ressources [ par baby3378 ]
Bonjour à tous, Voilà, afin de faciliter l'utilisation d'une application j'ai décidé de stocker les images et dll en ressource dans mon application af
Conversion d'un char[] en char*puis stocké en char*[] [ par Saigonoseme ]
Bonjour à tous, J'ai un petit souci de conversion d'une chaîne de caractère dans un tableau de chaînes de caractère !!!(tAgTabTrame). (C'est pas agré
fnsplit et fnmerge [ par samissam ]
Bonjour, j'ai un code d'une fonction que je veux l'exploiter en Dev C++ mais ce dernier me renvoi des erreur sur les fnsplit et fnmerg, code: vo
recherche fichier séquentiel [ par peter2010 ]
Bonjour, j'ai un fichier séquentiel contenant des informations séparées par des ; qui contient l'inventaire d'une épicerie,en paramètre j'ai le nom du
Programme Moyenne [ par kable78 ]
Bonjour, Je cherche à faire un programme qui permet le calcul d'une moyenne à partir d'un fichier. Dans ce fichier doit figurer le nom de l'élève sui
Acquisition d'images sur pc faites par CMUcam3 via liaison RS232 [ par nab26 ]
Bonjour à tous. Je travaille actuellement sur un projet nécessitant la programmation d'un capteur vidéo relié à mon pc par une liaison série RS232 :
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|