les fichiers - C - Programmation
Marsh Posté le 29-01-2008 à 15:35:41
alors pose une question.
Marsh Posté le 29-01-2008 à 15:41:41
comment on peut faire les operations suivantes en C concernant les fichiers: l'ouverture,l'insertion,la recherche d'un element, la suppression la recherche par index
Marsh Posté le 29-01-2008 à 16:06:54
En lisant la doc/le cours. Ce forum n'est pas une encyclopédie, mais un endroit où on t'aidera si tu as des problèmes.
Marsh Posté le 29-01-2008 à 16:11:09
et ça est un probleme parce que j'essaye de faire ce travail mais j'ai trouver des problemes en execution et je vais envoyer mon code source pour me croire
Marsh Posté le 29-01-2008 à 16:52:17
Te fatigue pas skeye il arrete pas d'ouvrir des topic en boucle pour qu'on lui fasse le travail....
Marsh Posté le 29-01-2008 à 16:52:29
Eh bien envoie donc ce fameux code source.
A+,
Marsh Posté le 29-01-2008 à 16:56:01
Aux autres, je viens d'envoyer un PM d'avertissement a qui de droit...
Prevenez moi en cas de recidive (creation d'un topic inutile)
A+,
Marsh Posté le 29-01-2008 à 17:35:12
mamitou a écrit : je veux votre aide pour manipuler les fichiers en Borland C |
J'exige ton aide pour faire ma vaisselle !
Marsh Posté le 29-01-2008 à 19:08:01
mamitou a écrit : comment on peut faire les operations suivantes en C concernant les fichiers: l'ouverture,l'insertion,la recherche d'un element, la suppression la recherche par index |
Tu lis ton cours de C, tu fais de ton mieux et tu postes ton code si il y'a un problème.
http://mapage.noos.fr/emdel/notes.htm#fichiers
Marsh Posté le 31-01-2008 à 11:49:50
slt j'ai fait l'ouverture d'un fichier la création d'u enregistrement la recherche mais la suppression ...
voilà mon code source:
//------------------------------------------------------------------------------
#pragma argsused
#include<stdio.h>
#include<stdlib.h>
#include <exception>
#include <iostream>
typedef struct{
char nom[10],prenom[10];
int age,code;
int indexe[20][2];
}personne;
int main(int argc, char* argv[])
{
FILE *p_fichier;
char nom_fichier[35];
personne p;
int c,nb,x,y,i,a;
bool trouver=faux;
/*création et remplissage*/
printf("entrer le nom de fichier:\n" );
scanf("%s",nom_fichier);
p_fichier=fopen (nom_fichier,"w" );
printf("entrer le nombre d'enregistrement a creer:\n" );
scanf("%d",&nb);
c=0;
while(c<nb)
{
printf("entrer le nom de personne:\n" );
scanf("%s",p.nom);
fprintf(p_fichier,"%s",p.nom);
printf("entrer le prenom de personne:\n" );
scanf("%s",p.prenom);
fprintf(p_fichier,"%s",p.prenom);
printf("entrer l'age de personne:\n" );
scanf("%d",&p.age);
fprintf(p_fichier,"%d",p.age);
printf("entrer le code de personne:\n" );
scanf("%d",&p.code);
fprintf(p_fichier,"%d",p.code);
c++;
}
fclose(p_fichier);
/*lecture et affichage*/
p_fichier=fopen(nom_fichier,"r" );
c=0;
while(!feof(p_fichier))
{
fscanf(p_fichier,"%s\n",p.nom);
printf("le nom est:%s\n",p.nom);
fscanf(p_fichier,"%s\n",p.prenom);
printf("le prenom est:%s\n",p.prenom);
fscanf(p_fichier,"%d\n",p.age);
printf("l'age est:%d\n",p.age);
fscanf(p_fichier,"%d\n",p.code);
printf("le code est:%d\n",p.code);
c++;
}
fclose(p_fichier);
/*suppression*/
p_fichier=fopen(nom_fichier,"w" );
printf("donner le code de la personne que vous voulez supprimer:\n" );
scanf("%d",&x);
while(!feof(p_fichier))
{
if(p.code==x) delete(p);
else c++;
}
printf("la personne a ete supprimee\n" );
fclose(p_fichier);
/*le recherche*/
p_fichier=fopen(nom_fichier,"r" );
printf("donner le code de la personne recherchee:\n" );
scnf("%d",&y);
while(!feof(p_fichier)| trouver=vrai)
{
if(p.code==y)
{
trouver=vrai;
printf("\n\t la personne recherchee s'appelle:%s %s\n",p.nom,p.prenom);
printf("\n \t son age est: %d\n",p.age);
}
else c++;
}
if(trouver==faux) printf("\n cette personne n'existe pas\n" );
fclose(p_fichier);
/*la recherche par indexe*/
p_fichier=fopen(nom_fichier,"w" );
i=1;
while(i>nb_pres)
{
p.[i][1]=i;
p.indexe[i][2]=p.code;
i++;
}
printf("la table d'indexe est: %d\n",p.indexe);
printf(" donner l'indexe :\n" );
scanf("%d",&a);
while(feof(p_fichier))
{
if(i==a)
{
trouver=vrai;
fseek(p_fichier,(i-1)*sizeof(p_fichier),1);
printf("\n \t la personne s'appelle: %s %s\n",p.nom,p.prenom);
printf("\n \t son age est: %d\n",p.age);
}
else if(touver==faux) printf ("\n\t cette personne n'existe pas" );
}
fclose(p_fichier);
getchar();
return 0;
}
//----------------------------------------------------------
Marsh Posté le 31-01-2008 à 12:33:31
mamitou a écrit : slt j'ai fait l'ouverture d'un fichier la création d'u enregistrement la recherche mais la suppression ...
|
Pas du C.
|
Reposte du C pur (ou modifie ton code) et utilisant les balises de code comme indiqué dans les règles du forum que tu aurais dû lire avant de poster.
Marsh Posté le 31-01-2008 à 12:41:53
*suppression*/
p_fichier=fopen(nom_fichier,"w" );
printf("donner le code de la personne que vous voulez supprimer:\n" );
scanf("%d",&x);
while(!feof(p_fichier))
{
if(p.code==x) delete(p);
else c++;
}
printf("la personne a ete supprimee\n" );
fclose(p_fichier);
Marsh Posté le 31-01-2008 à 12:44:40
mamitou a écrit : *suppression*/ |
Mais c'est quoi ça ?
C'est si difficile que ça de suivre les consignes ?
J'ai un peu regardé ton code.
Citation :
|
Beaucoup d'erreurs basiques.
Comment te formes tu en C ? Ca parait très confus...
Sinon, il y a des erreurs qui prouvent que tu n'as jamais compilé ce code. C'est pas à nous de corriger tes fautes de frappes. Il faut faire un minimum d'effort, nous ne sommes pas à ton service.
Par exemple, 'delete' n'existe pas.
Ton code est 'en vrac'. On voit qu'il n'y a pas eu d'étude préalable qui aurais permis une organisation claire en fonctions simples.
Le rôle de 'indexe' nest pas clair.
Marsh Posté le 31-01-2008 à 15:12:37
d'après ce que vous avez écrit il me semble que vous n'avez pas une idée claire sur la méthode à suivre pour supprimer un enreg.
je vais vous donnez une simple idée; pour faire la suppression d'un enregistrement à partir d'un fichier ;
elle est simple elle consiste à copier votre fichier(càd tous les enreg.) sur une autre nouveau fichier ((que vous allez le créer)) sauf l'enreg. à supprimer et que vous le désignez au début par son nom ou par code ou comme vous voulez>>ensuite à recopier ce nouveau fichier dans le récent {ça sera un écrasement..}..
ok?
Marsh Posté le 31-01-2008 à 15:14:27
tsunade sama a écrit : d'après ce que vous avez écrit il me semble que vous n'avez pas une idée claire sur la méthode à suivre pour supprimer un enreg. |
m'enfin...
Marsh Posté le 31-01-2008 à 15:19:15
ReplyMarsh Posté le 31-01-2008 à 15:19:57
tsunade sama a écrit : pour moi ça??!!
|
euh, oui.
Ce n'est vraiment pas une bonne idée...et certainement pas ce qu'attend le prof qui lui a donné cet exercice.
Marsh Posté le 31-01-2008 à 15:22:16
donc, pouvez vous me dire quelle idée vous proposé ??
SVP
Marsh Posté le 31-01-2008 à 15:23:42
je suis une débutante et ça est tout ce que je sais..
en attendant...
Marsh Posté le 31-01-2008 à 15:24:26
supprimer la ligne dans le fichier directement...
Marsh Posté le 31-01-2008 à 15:26:01
skeye a écrit : |
Bon en même temps ce qu'écrit mamitou est très confus, et j'ai la flemme de lire son code gribouilli.
Mais s'il s'agit effectivement de supprimer un enregistrement d'un fichier, alors tsunade sama a raison, il faut tout réécrire dans un nouveau fichier sans l'enregistrement à supprimer, et écraser l'ancien fichier avec le nouveau (ou alors j'ai pas compris non plus )
Marsh Posté le 31-01-2008 à 15:29:57
pas compris..
Citation : assert(tsunade_sama == mamitou); |
mais avec quelle commande ??
Citation : supprimer la ligne dans le fichier directement... |
Marsh Posté le 31-01-2008 à 15:30:24
skeye a écrit : supprimer la ligne dans le fichier directement... |
Et comment tu comptes faire ça en C ?
Marsh Posté le 31-01-2008 à 15:34:17
Elmoricq a écrit : |
ça existe plus les fichiers ouverts en lecture/écriture? J'ai pas fait de C depuis des lustres, mais quand même...
Marsh Posté le 31-01-2008 à 15:35:52
et alors nazztazz
Citation : pas compris.. |
votre pseudo signifie quoi ???!!!
Marsh Posté le 31-01-2008 à 15:38:43
oui..merci
mais que signifie ça !!!
Citation : assert(tsunade_sama == mamitou); |
Marsh Posté le 31-01-2008 à 15:40:24
man assert
Standard C Library Functions assert(3C) |
Marsh Posté le 31-01-2008 à 15:45:20
skeye a écrit : |
C'est pourtant une solution industrielle bien connue.
Marsh Posté le 31-01-2008 à 15:45:32
pas encore..
mieu expliquez
Emmanuel Delahaye a écrit :
Citation : C'est pourtant une solution industrielle bien connue. |
Marsh Posté le 31-01-2008 à 15:47:06
skeye a écrit : supprimer la ligne dans le fichier directement... |
Bah, non. C'est la meilleure façon de détruire ses données sans aucune possibilité de les récupérer...
Marsh Posté le 31-01-2008 à 15:47:06
Emmanuel Delahaye a écrit : C'est pourtant une solution industrielle bien connue. |
Je (re)découvre avec horreur que C ne sait pas faire proprement ce qui me semblait évident...au temps pour moi...
Marsh Posté le 31-01-2008 à 15:51:06
skeye a écrit : |
Pas de manière portable en tout cas.
Marsh Posté le 31-01-2008 à 15:54:37
merci elmo mais je veut savoir pourquoi il a tapé mon pseudo !!!!
Citation : tsunade_sama == mamitou |
revennans à ça
Citation : supprimer la ligne dans le fichier directement... |
comment le faire ,je me demande?!!!
Marsh Posté le 31-01-2008 à 15:56:33
tsunade sama a écrit : |
Les messieurs plus haut qui ont une pratique plus récente et nettement plus experte de C que moi semblent dire que tu avais raison, et que mon idée n'est pas réalisable de manière portable.
Marsh Posté le 31-01-2008 à 16:13:01
tsunade sama a écrit : merci elmo mais je veut savoir pourquoi il a tapé mon pseudo !!!! |
C'était une petite moquerie, rien de plus.
Ne t'en formalise pas, il y a simplement eu erreur, ça arrive.
edit : oui c'est moi (les impliqués comprendront )
Marsh Posté le 31-01-2008 à 16:15:35
(juste à propos de la suppression dans le fichier... il s'agit ici d'un fichier de record... la logique veut qu'on laisse les trous : suppression d'un élément ? > on passe à "0" le field qui permet de l'identifier. lorsqu'on crée un nouvel élément, plutôt que de faire un bête append la fin du fichier, on construit d'abords une pile des positions contenant un enregistrement vide, afin de boucher les trous, et seulement quand la pile est entièremement consommée, on va faire des append).
sinon, ça sert à rien de bosser avec des fichiers de record, on perd tout l'intérêt du truc !
-- Edit : J'ai comme un doute là... on, sait pas faire du random access en C ?
http://msdn2.microsoft.com/fr-fr/l [...] S.80).aspx
Je ne vois pas de mode permettant d'ouvrir in fichier existant en écriture sans le détuire au préalable, ou bloquer les maj en mode append.
-- Re-edit : Si c'est bien le cas, y'a une lib qui permet de contourner cette limitation, ou si ça oblige les développeurs à travailler avec un langage tiers pour pouvoir travailler dans des fichiers volumineux nécessitants de hauts performances (genre un SGBD). Parceque si dès qu'on veut modifier le 3° byte d'un fichier de 2 Go on doit se taper une recopie du fichier en entier, ça va pas le faire
Marsh Posté le 31-01-2008 à 17:43:01
Ah ben nan mais si mais je suis nul moi je sais pas lire
Citation : |
=> Voilà, donc c'est ce mode qu'il faut utiliser pouraccéder à un fichier record.
=> Là on peut lire, faire des trous, remplir les trous, et ajouter à la fin du fichier
En fait faut lire "r+" pour "Random Access" et non "Read"
Je me disais bien aussi que c'était énorme que ce soit impossible à faire en C !
Marsh Posté le 29-01-2008 à 15:34:52
je veux votre aide pour manipuler les fichiers en Borland C