les fichiers

les fichiers - C - Programmation

Marsh Posté le 29-01-2008 à 15:34:52    

je veux votre aide pour manipuler les fichiers en Borland C

Reply

Marsh Posté le 29-01-2008 à 15:34:52   

Reply

Marsh Posté le 29-01-2008 à 15:35:41    

alors pose une question.[:dawa]


---------------
Can't buy what I want because it's free -
Reply

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

Reply

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.


---------------
Can't buy what I want because it's free -
Reply

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

Reply

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....

Reply

Marsh Posté le 29-01-2008 à 16:52:29    

Eh bien envoie donc ce fameux code source.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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 ! :jap:


Message édité par kyntriad le 29-01-2008 à 17:35:23

---------------
You can't start a fire with moonlight
Reply

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

 



Message édité par Emmanuel Delahaye le 29-01-2008 à 19:08:51

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 29-01-2008 à 19:08:01   

Reply

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;
}
 
//----------------------------------------------------------

Reply

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 ...
voilà mon code source:

Code :
  1. #include <exception>
  2. #include <iostream>



Pas du C.  


Project   : Forums
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\dev\forums\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
main.c:1: warning: ignoring #pragma argsused  
main.c:4:21: exception: No such file or directory
main.c:5:20: iostream: No such file or directory
main.c: In function `main':
main.c:17: error: `bool' undeclared (first use in this function)
main.c:17: error: (Each undeclared identifier is reported only once
main.c:17: error: for each function it appears in.)
main.c:17: error: syntax error before "trouver"
main.c:51: warning: format argument is not a pointer (arg 3)
main.c:53: warning: format argument is not a pointer (arg 3)
main.c:65: warning: implicit declaration of function `delete'
main.c:75: warning: implicit declaration of function `scnf'
main.c:76: error: `trouver' undeclared (first use in this function)
main.c:76: error: `vrai' undeclared (first use in this function)
main.c:86: error: `faux' undeclared (first use in this function)
main.c:91: error: `nb_pres' undeclared (first use in this function)
main.c:93: error: syntax error before '[' token
main.c:97: warning: int format, pointer arg (arg 2)
main.c:110: error: `touver' undeclared (first use in this function)
main.c: At top level:
main.c:11: warning: unused parameter 'argc'
main.c:11: warning: unused parameter 'argv'
Process terminated with status 1 (0 minutes, 0 seconds)
12 errors, 8 warnings


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.


Message édité par Emmanuel Delahaye le 31-01-2008 à 12:40:12

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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);

Reply

Marsh Posté le 31-01-2008 à 12:44:40    

mamitou a écrit :

*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);


Mais c'est quoi ça ?

 
  • Ne compile pas
  • Pas de balises code.


C'est si difficile que ça de suivre les consignes ?

 

J'ai un peu regardé ton code.

 
Citation :

Code :
  1. while (!feof (p_fichier) | trouver = vrai)



Beaucoup d'erreurs basiques.

 
  • feof() ne fait pas ce que tu crois
  • Confusion entre = et ==,
  • Confusion entre | et ||, (en fait, c'est plutôt &&, ici)
  • Pas de bool en C90, mais int, 0 et 1

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.


Message édité par Emmanuel Delahaye le 31-01-2008 à 13:01:09

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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.  :pt1cable:  
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? :hello:


---------------
don't give up
Reply

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.  :pt1cable:  
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? :hello:


 
m'enfin...[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 31-01-2008 à 15:19:15    

pour moi ça??!!

Citation :

m'enfin...[:pingouino]


---------------
don't give up
Reply

Marsh Posté le 31-01-2008 à 15:19:57    

tsunade sama a écrit :

pour moi ça??!!

Citation :

m'enfin...[:pingouino]



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. ;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 31-01-2008 à 15:22:16    

donc, pouvez vous me dire quelle idée vous proposé ?? [:ryoandr]  
SVP


Message édité par tsunade sama le 31-01-2008 à 15:24:03

---------------
don't give up
Reply

Marsh Posté le 31-01-2008 à 15:23:42    

je suis une débutante et ça est tout ce que je sais..
en attendant... :bounce:


---------------
don't give up
Reply

Marsh Posté le 31-01-2008 à 15:24:26    

supprimer la ligne dans le fichier directement...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 31-01-2008 à 15:26:01    

skeye a écrit :


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. ;)


 
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 [:dawao])

Reply

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...


Message édité par tsunade sama le 31-01-2008 à 15:31:48

---------------
don't give up
Reply

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 ? [:pingouino dei]

Reply

Marsh Posté le 31-01-2008 à 15:34:17    

Elmoricq a écrit :


 
Et comment tu comptes faire ça en C ? [:pingouino dei]


 
ça existe plus les fichiers ouverts en lecture/écriture? J'ai pas fait de C depuis des lustres, mais quand même...[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 31-01-2008 à 15:35:52    

et alors nazztazz

Citation :

pas compris..
Citation :
 
assert(tsunade_sama == mamitou);
 


 
votre pseudo signifie quoi ???!!! [:choco pops]


---------------
don't give up
Reply

Marsh Posté le 31-01-2008 à 15:38:43    

oui..merci
mais que signifie ça !!!

Citation :

assert(tsunade_sama == mamitou);


---------------
don't give up
Reply

Marsh Posté le 31-01-2008 à 15:40:24    

man assert

Standard C Library Functions                           assert(3C)
 
NAME
     assert - verify program assertion
 
SYNOPSIS
     #include <assert.h>
 
     void assert(int expression);
 
DESCRIPTION
     The assert() macro inserts  diagnostics  into  applications.
     When  executed,  if  expression  is  FALSE  (zero), assert()
     prints the error message
 
     Assertion failed: expression, file xyz, line nnn
 
     on the standard error output and aborts. In the  error  mes-
     sage,  xyz is the name of the source file and nnn the source
     line number of the assert()  statement.  These  are  respec-
     tively  the  values  of the preprocessor macros __FILE__ and
     __LINE__.
 
     Since assert() is implemented as a macro, the expression may
     not contain any string literals.
 
     Compiling  with  the  preprocessor  option   -DNDEBUG   (see
     cc(1B)),  or with the preprocessor control statement #define
     NDEBUG ahead of the #include <assert.h> statement, will stop
     assertions from being compiled into the program.
 
     If the application is linked with -lintl,  messages  printed
     from  this  function are in the native language specified by
     the LC_MESSAGES locale category; see setlocale(3C).
 

Reply

Marsh Posté le 31-01-2008 à 15:45:20    

skeye a écrit :


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. ;)


C'est pourtant une solution industrielle bien connue.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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.


Message édité par tsunade sama le 31-01-2008 à 15:50:12

---------------
don't give up
Reply

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...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

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...[:skeye]

Message cité 1 fois
Message édité par skeye le 31-01-2008 à 15:47:12

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 31-01-2008 à 15:51:06    

skeye a écrit :


 
Je (re)découvre avec horreur que C ne sait pas faire proprement ce qui me semblait évident...au temps pour moi...[:skeye]


 
Pas de manière portable en tout cas. :/

Reply

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?!!!


---------------
don't give up
Reply

Marsh Posté le 31-01-2008 à 15:56:33    

tsunade sama a écrit :


comment le faire ,je me demande?!!!


 
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.


---------------
Can't buy what I want because it's free -
Reply

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. [:romf]

 


edit : oui c'est moi (les impliqués comprendront [:dawao])


Message édité par Elmoricq le 31-01-2008 à 16:14:04
Reply

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 :ouch:


Message édité par MagicBuzz le 31-01-2008 à 16:35:59
Reply

Marsh Posté le 31-01-2008 à 17:43:01    

Ah ben nan mais si mais je suis nul moi je sais pas lire [:magicbuzz]
 

Citation :


"r+"
Opens for both reading and writing. (The file must exist.)


 
=> 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 !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed