[C] Ajout/suppression d'un enregistrement
Fermé
fabianno
-
16 avril 2003 à 17:10
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 juin 2014 à 18:22
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 juin 2014 à 18:22
A voir également:
- [C] Ajout/suppression d'un enregistrement
- Forcer la suppression d'un fichier - Guide
- Suppression page word - Guide
- Telecharger studio d'enregistrement rap - Télécharger - Édition & Montage
- Suppression cookies - Guide
- Ajouter un compte gmail - Guide
12 réponses
salut
svp , jai un prb avc c,
en fait , je trouve une déficulé pour modifier un champs dans un enregistrement ( mise à jour d'un fichier):
j'ai ce enregistrement
typedef struct
{
char nom[20];
char prenon[20];
float note;
}etudiant;
mn prob c'est que je veux modifier la note d'un etudiant , sachant que j'ai 3 étudiant qui sont stokés ds un fichier de type txt
svp aidé moi
merci d'avance
svp , jai un prb avc c,
en fait , je trouve une déficulé pour modifier un champs dans un enregistrement ( mise à jour d'un fichier):
j'ai ce enregistrement
typedef struct
{
char nom[20];
char prenon[20];
float note;
}etudiant;
mn prob c'est que je veux modifier la note d'un etudiant , sachant que j'ai 3 étudiant qui sont stokés ds un fichier de type txt
svp aidé moi
merci d'avance
letissya
Messages postés
89
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
8 novembre 2005
5
16 avril 2003 à 17:22
16 avril 2003 à 17:22
pour atteindre précisément l'endroit souhaité, il faut parcourir le fichier en comparant chaque ligne/mot/chaine de caracatère à l'enregistrement que tu veux supprimer... pour cela il doit y avoir une fonction read ou fread... qui fonctionne comme le fprint.. et qui te retourne la ligne courante de ton fichier... si c'est pas la bonne tu passes à la suivante, etc...
mais il faudrait que tu soit un peu plus clair sur la structure de ton fichier, parce que j'ai pas bien compris à quoi correspond tes enregistrements...
mais il faudrait que tu soit un peu plus clair sur la structure de ton fichier, parce que j'ai pas bien compris à quoi correspond tes enregistrements...
en fait ;
je dois faire un tableau de structure car je dois trier par nom,comparer des chaines de caractère , et par exemple pour l'ajout , je prends de livre[i].nom à livre[n].nom , je boucle et j'enregistre tout ca .
j'ai un champ : char nom pour le nom du livre
et aussi char auteur
je vais essayer avec fread je sais que ca existe , il ya aussi fgets pour lire ligne par ligne , mais bon je me prends la tete depuis 4jours et j'y arrive tjs pas .Exemple : supprimer un enregistrement complet où le nom du livre ==le chien (par exemple) avec la fonction strcmp
je dois faire un tableau de structure car je dois trier par nom,comparer des chaines de caractère , et par exemple pour l'ajout , je prends de livre[i].nom à livre[n].nom , je boucle et j'enregistre tout ca .
j'ai un champ : char nom pour le nom du livre
et aussi char auteur
je vais essayer avec fread je sais que ca existe , il ya aussi fgets pour lire ligne par ligne , mais bon je me prends la tete depuis 4jours et j'y arrive tjs pas .Exemple : supprimer un enregistrement complet où le nom du livre ==le chien (par exemple) avec la fonction strcmp
letissya
Messages postés
89
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
8 novembre 2005
5
16 avril 2003 à 17:49
16 avril 2003 à 17:49
mais tu travaille sur un fichier ou un tableau.. c'est ça que je comprend pas...
de toute façon le pb est le même...
si c'est dans un tableau
tu fais un truc du genre :
tant que tu n'as pas trouvé ton enregistrement ou que c'est pas la fin du tableau
tu lis la ligne/enregistrement
tu compares avec strcmp
si c'est ok tu arretes (avec un booleen)
sinon tu fais rien, tu passes à la ligne suivante avec le tant que
fin tant que
par contre si tu effaces dans un tableau il faut que tu le mette à jours à la main... en gros si tu efface tab[2] il faut que tu décale tous les suivants sinon tab[2] sera toujours vide...
de toute façon le pb est le même...
si c'est dans un tableau
tu fais un truc du genre :
tant que tu n'as pas trouvé ton enregistrement ou que c'est pas la fin du tableau
tu lis la ligne/enregistrement
tu compares avec strcmp
si c'est ok tu arretes (avec un booleen)
sinon tu fais rien, tu passes à la ligne suivante avec le tant que
fin tant que
par contre si tu effaces dans un tableau il faut que tu le mette à jours à la main... en gros si tu efface tab[2] il faut que tu décale tous les suivants sinon tab[2] sera toujours vide...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
Modifié par fiddy le 24/06/2014 à 18:22
Modifié par fiddy le 24/06/2014 à 18:22
Merci d'ouvrir ton propre post pour qu'on réponde à ton sujet.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Grand merci pour la rapidité des réponses , c'est très gentil!!!!
Quand je travaille en tableau , y a pas de probleme je supprime puis je décale a partir de i jusque au compteur .Mais c'est dans un fichier que j'arrive pas à travailler .En fait avec un fichier je ne dois plus travailler en tableau ? comment faire alors ? Et à chaque modif ds le fichier , je dois creer un nouveau alors? et est ce possible d'écraser l'ancien ?
En fait (en principe )je dois toujours travailler en fichier , mais n'y arrivant pas j'ai essayé en mémoire .Mon programme de repertoire de livre est terminé (en mémoire ) .Mais en fichier , c'est la galère!!!!!!!!!!!!!!!
Quand je travaille en tableau , y a pas de probleme je supprime puis je décale a partir de i jusque au compteur .Mais c'est dans un fichier que j'arrive pas à travailler .En fait avec un fichier je ne dois plus travailler en tableau ? comment faire alors ? Et à chaque modif ds le fichier , je dois creer un nouveau alors? et est ce possible d'écraser l'ancien ?
En fait (en principe )je dois toujours travailler en fichier , mais n'y arrivant pas j'ai essayé en mémoire .Mon programme de repertoire de livre est terminé (en mémoire ) .Mais en fichier , c'est la galère!!!!!!!!!!!!!!!
letissya
Messages postés
89
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
8 novembre 2005
5
16 avril 2003 à 18:12
16 avril 2003 à 18:12
T'inquiètes pas tu devrais pas tarder à t'en sortir...
pour lire dans ton fichier, il y a une commande qui te permet de te placer au début du fichier et une à la fin.. je ne les connais pas par coeur mais bon...exactement comme pour le tableau...
la seule chose c'est que tu ne pas aller à un endroit directement ... il faut que tu parcours à chaque fois
la fin du fichier c'est un truc du genre eof (end of file)
après essai d'utiliser la fonction qui permet de lire ligne à ligne parce que sinon tu es obligé de définir la taille de ce que tu veux lire et si t'en es pas sûr c'est galère.. quoique tu dois pouvoir avec des sizeof(chaine de caractère) bref..;
un fois que tu as récupéré ta ligne ou tu dois avoir écris un truc du genre :
titre_livre nom_auteur prenom_auteur nb_pages etc...
tout ça séparé par des espaces... ça dépend comment tu écris dans ton fichier(il faut que tu me l'expliques si tu veux plus de détail)
Donc une fois que tu as ta ligne tu la mets dans une grosse chaine de caractère dans laquelle tu cherches les espaceset tu te déplace dans la chaine pour trouver le champs avec quoi tu veux comparer (ex titre_livre = chien)
Bon si tu as des espaces dans les titres des livres il va falloir envisager autre chose...
et si tu trouves pas tu passes à la ligne suivante..
pour ça il suffit de lire à nouveau avec fgets .. parce que chaque fois que tu lis une ligne, ton curseur est ensuite positionné à la ligne suivante...
pour lire dans ton fichier, il y a une commande qui te permet de te placer au début du fichier et une à la fin.. je ne les connais pas par coeur mais bon...exactement comme pour le tableau...
la seule chose c'est que tu ne pas aller à un endroit directement ... il faut que tu parcours à chaque fois
la fin du fichier c'est un truc du genre eof (end of file)
après essai d'utiliser la fonction qui permet de lire ligne à ligne parce que sinon tu es obligé de définir la taille de ce que tu veux lire et si t'en es pas sûr c'est galère.. quoique tu dois pouvoir avec des sizeof(chaine de caractère) bref..;
un fois que tu as récupéré ta ligne ou tu dois avoir écris un truc du genre :
titre_livre nom_auteur prenom_auteur nb_pages etc...
tout ça séparé par des espaces... ça dépend comment tu écris dans ton fichier(il faut que tu me l'expliques si tu veux plus de détail)
Donc une fois que tu as ta ligne tu la mets dans une grosse chaine de caractère dans laquelle tu cherches les espaceset tu te déplace dans la chaine pour trouver le champs avec quoi tu veux comparer (ex titre_livre = chien)
Bon si tu as des espaces dans les titres des livres il va falloir envisager autre chose...
et si tu trouves pas tu passes à la ligne suivante..
pour ça il suffit de lire à nouveau avec fgets .. parce que chaque fois que tu lis une ligne, ton curseur est ensuite positionné à la ligne suivante...
si tu veux le code source
http://membres.lycos.fr/examendepmp/projet.c
ca sera plus facile
mon fichier est de ce type
NOM : untel
PRENOM:dppdp
ADRESSE:huuu
Ici c'est plus des livres mais des personnes mais bon le principe est le meme
http://membres.lycos.fr/examendepmp/projet.c
ca sera plus facile
mon fichier est de ce type
NOM : untel
PRENOM:dppdp
ADRESSE:huuu
Ici c'est plus des livres mais des personnes mais bon le principe est le meme
En plus , dois je continuer à utiliser un indice si je travaille en fichier , ? mais alors comment vais je trier mon fichier sans indice?
j'en peux plus c'est de la folie , meme avec internet et 10 bouquins sur le C devant moi , j'y arrive pas .!!!!!!!!!!!!!!
j'en peux plus c'est de la folie , meme avec internet et 10 bouquins sur le C devant moi , j'y arrive pas .!!!!!!!!!!!!!!
letissya
Messages postés
89
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
8 novembre 2005
5
16 avril 2003 à 18:34
16 avril 2003 à 18:34
oups j'ai envoyé sans faire.. exprès..
bon il faut que j'y aille ... j'ai ton source.. je vais le regarder demaint matin... et je t'expliquerais(si j'y arrive)... t'inquiètes je vais essayer de t'aider ..
à demain...
bon il faut que j'y aille ... j'ai ton source.. je vais le regarder demaint matin... et je t'expliquerais(si j'y arrive)... t'inquiètes je vais essayer de t'aider ..
à demain...
voici le fichier sans erreur , compilable de mon projet .Mais avec des tableaux de structure , tout se fait en memoire et sauvegarde dans un fichier record.txt en sortie
http://membres.lycos.fr/examendepmp/agenda_memoire.c
encore un grand merci
http://membres.lycos.fr/examendepmp/agenda_memoire.c
encore un grand merci
letissya
Messages postés
89
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
8 novembre 2005
5
>
fabio
17 avril 2003 à 09:48
17 avril 2003 à 09:48
Bonjour,
bon je suis en train de regarder ton code..
mais je ne peux pas le compiler parce qu'en ce moment je travail pas en C...
mais par contre j'ai trouvé un site qui explique super bien comment :
- Ajouter un enregistrement à un fichier
- Supprimer un enregistrement dans un fichier
- Modifier un enregistrement dans un fichier
et il y a même un exemple pour l'insertion d'un enregistrement à introduire au clavier dans un fichier trié selon la seule rubrique de ses enregistrements: le nom d'une personne. La comparaison lexicographique des noms des personnes se fait à l'aide de la fonction strcmp.
http://www.ltam.lu/Tutoriel_Ansi_C/prg-c148.htm
regarde et tu comprendras comment fonctionnent les fichiers séquentiel (il y a des dessins)
si jamais tu n'y arrives vraiment pas avec cet exemple, écris moi ce que tu comprends pas..
bon je suis en train de regarder ton code..
mais je ne peux pas le compiler parce qu'en ce moment je travail pas en C...
mais par contre j'ai trouvé un site qui explique super bien comment :
- Ajouter un enregistrement à un fichier
- Supprimer un enregistrement dans un fichier
- Modifier un enregistrement dans un fichier
et il y a même un exemple pour l'insertion d'un enregistrement à introduire au clavier dans un fichier trié selon la seule rubrique de ses enregistrements: le nom d'une personne. La comparaison lexicographique des noms des personnes se fait à l'aide de la fonction strcmp.
http://www.ltam.lu/Tutoriel_Ansi_C/prg-c148.htm
regarde et tu comprendras comment fonctionnent les fichiers séquentiel (il y a des dessins)
si jamais tu n'y arrives vraiment pas avec cet exemple, écris moi ce que tu comprends pas..
merci je vais lire ca , c'est très gentil , mon code est mis à jour sur le ftp http://membres.lycos.fr/examendepmp/agenda_memoire.c
encore merci si tu veux une analyse du code je l'ai aussi , ds le meme repertoire c'est prog.doc
encore merci si tu veux une analyse du code je l'ai aussi , ds le meme repertoire c'est prog.doc
letissya
Messages postés
89
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
8 novembre 2005
5
17 avril 2003 à 13:46
17 avril 2003 à 13:46
je t'ai dis une grosse bêtise tu n'as pas besoin de mettre de séparateur :
si tu écris dans ton fichier avec une commande de ce style
fprintf(OUTFILE, "%s %s %s %d %s\n", nom,prenom,adresse,date,telephone );
tu peux faire directement quand tu lis dans le fichier une commande qui te mets directement les valeurs dont tu as besoin dans des variables...
fscanf (INFILE, "%s %s %s %d %s\n", nom,prenom,adresse,date,telephone );
enfin c'est à tester... mais ça devrait être possible..
voilà, je pense que tu devrais t'en sortir maintenant..
Letissya
si tu écris dans ton fichier avec une commande de ce style
fprintf(OUTFILE, "%s %s %s %d %s\n", nom,prenom,adresse,date,telephone );
tu peux faire directement quand tu lis dans le fichier une commande qui te mets directement les valeurs dont tu as besoin dans des variables...
fscanf (INFILE, "%s %s %s %d %s\n", nom,prenom,adresse,date,telephone );
enfin c'est à tester... mais ça devrait être possible..
voilà, je pense que tu devrais t'en sortir maintenant..
Letissya
merci avec ca je vais bien m'en sortir , tu ne pourras pas mieux m'aider!!!!!!!!!c'est très gentil.
J'aimerais encore t'ennuyer une dernière fois , donc mon source il ya une fonction de tri (trialpha()) , j'utilise deux fois le meme code de permutation c'est inutile , pourrais m'indiquer le moyen de creer une fonction permute void permute(arguments) , je ne sais pas quels arguments je dois lui passer.
Encore un grand merci de consacrer autant de tps pour moi !!!!!!!!!!!
J'aimerais encore t'ennuyer une dernière fois , donc mon source il ya une fonction de tri (trialpha()) , j'utilise deux fois le meme code de permutation c'est inutile , pourrais m'indiquer le moyen de creer une fonction permute void permute(arguments) , je ne sais pas quels arguments je dois lui passer.
Encore un grand merci de consacrer autant de tps pour moi !!!!!!!!!!!
letissya
Messages postés
89
Date d'inscription
mercredi 16 avril 2003
Statut
Membre
Dernière intervention
8 novembre 2005
5
17 avril 2003 à 17:28
17 avril 2003 à 17:28
Bon je vais te faire un algo approximati
void permut( type_char ancien_nom,
type_char nouv_nom,
type_char ancien_prénom,
type_char nouv_prénom,
type_char ancien_adr,
type_char nouv_adr,
type_date ancien_date,
type_date nouv_date
type_char ancien_tél,
type_char nouv_tél)
{
char temp; // exactement comme dans ton code
int tmp;
// et après tu fais pareil sauf que tu changes les noms avec tes params
strcpy(temp,ancien_nom);
strcpy(ancien_nom,nouv_nom);
strcpy(nouv_nom,temp);
fflush(stdin);
strcpy(temp,ancien_prénom);
strcpy(ancien_prénom,nouv_prénom);
strcpy(nouv_prenom,temp);
fflush(stdin);
strcpy(temp,ancien_adr);
strcpy(ancien_adr,nouv_adr);
strcpy(nouv_adr,temp);
fflush(stdin);
tmp=ancien_date;
ancien_date=nouv_date;
nouv_date=tmp;
fflush(stdin);
strcpy(temp,ancien_tel);
strcpy(ancien_tel,nouv_tel);
strcpy(nouv_tel,temp);
fflush(stdin);
}
et pour appeler la ta procédure tu fais :
permut( personne[i].nom,
personne[j].nom,
personne[i].prenom,
personne[j].prenom,
personne[i].adresse,
personne[j].adresse,
personne[i].date,
personne[j].date,
personne[i].telephone,
personne[j].telephone);
voilà ça doit être à peu près ça...
par contre il est possible qu'il faille que tu passes tes paramètres par adresse et non par valeur comme c'est le cas ici sinon ça va pas marcher...
bon pour t'éclairer tu as une explication là :
http://www.ltam.lu/Tutoriel_Ansi_C/prg-c121.htm
il faut juste que tu rajoutes des * et des & dans ton code rien de méchant tu vas vite comprendre ( si tu ne le sais pas déjà!!)
ben bon courage
a+
Letissya
void permut( type_char ancien_nom,
type_char nouv_nom,
type_char ancien_prénom,
type_char nouv_prénom,
type_char ancien_adr,
type_char nouv_adr,
type_date ancien_date,
type_date nouv_date
type_char ancien_tél,
type_char nouv_tél)
{
char temp; // exactement comme dans ton code
int tmp;
// et après tu fais pareil sauf que tu changes les noms avec tes params
strcpy(temp,ancien_nom);
strcpy(ancien_nom,nouv_nom);
strcpy(nouv_nom,temp);
fflush(stdin);
strcpy(temp,ancien_prénom);
strcpy(ancien_prénom,nouv_prénom);
strcpy(nouv_prenom,temp);
fflush(stdin);
strcpy(temp,ancien_adr);
strcpy(ancien_adr,nouv_adr);
strcpy(nouv_adr,temp);
fflush(stdin);
tmp=ancien_date;
ancien_date=nouv_date;
nouv_date=tmp;
fflush(stdin);
strcpy(temp,ancien_tel);
strcpy(ancien_tel,nouv_tel);
strcpy(nouv_tel,temp);
fflush(stdin);
}
et pour appeler la ta procédure tu fais :
permut( personne[i].nom,
personne[j].nom,
personne[i].prenom,
personne[j].prenom,
personne[i].adresse,
personne[j].adresse,
personne[i].date,
personne[j].date,
personne[i].telephone,
personne[j].telephone);
voilà ça doit être à peu près ça...
par contre il est possible qu'il faille que tu passes tes paramètres par adresse et non par valeur comme c'est le cas ici sinon ça va pas marcher...
bon pour t'éclairer tu as une explication là :
http://www.ltam.lu/Tutoriel_Ansi_C/prg-c121.htm
il faut juste que tu rajoutes des * et des & dans ton code rien de méchant tu vas vite comprendre ( si tu ne le sais pas déjà!!)
ben bon courage
a+
Letissya
6 avril 2008 à 12:02
tu peux t'inspirer ici
http://www.commentcamarche.net/forum/affich 5110899 linux?page=2#34