Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1396 connectés 

  FORUM HardWare.fr
  Programmation
  C

  modifier une ligne precise d'un fichier texte

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

modifier une ligne precise d'un fichier texte

n°2006974
zdarbilo
Posté le 04-07-2010 à 16:45:24  profilanswer
 

bonjour a tous depuis hier j'essaie de modifier un fichier a une ligne precise, je m'explique :
j'ai un fichier structuré de cette facon : une ligne avec le nom d'un spectacle et la suivante avec le nombre de place dipsonibles pour ce spectacle je souhaite modifier le nombre de place pour un spectacle precis , je connais le nombre de ligne ainsi que la ligne que je souhaite modifier j'utilise fgets pour me deplacer dans le fichier et fputs pour ecrire à la ligne souhaité voici ma fonction mon probleme est que celle ci n'ecrit rien dans le fichier :
 

Code :
  1. int test_spect(int num_spect,int nbre_place,char *place[20]){
  2. int a;char line[256];char* place_final;
  3.     printf("%s",place[num_spect]);
  4.     int init_place=atoi(place[num_spect]);
  5.      printf("nombre de place initiale :%d",init_place);
  6.                  printf("SPECTACLE initiale :%d",num_spect);
  7.      if(init_place>=nbre_place){
  8.      int place_rest=init_place-nbre_place;
  9.      printf("nombre de place restante :%d",place_rest);
  10.      F1 = fopen("toto.txt","r+" ); //ouverture en lecture/ecriture
  11.          if(F1==NULL){
  12.           fprintf(stderr,"Impossible d'ouvrir le fichier \n" );
  13.               }
  14.           printf("............ Ouverture du fichier \n" );
  15.            printf("bloque a" );
  16.           for(a=1;a<num_spect;a++){
  17.            fgets(line,256,F1);
  18.            fgets(line,256,F1);
  19.           }
  20.       fgets(line,256,F1);
  21.       place_final=malloc(sizeof(place_rest));
  22.       sprintf(place_final,"%d",place_rest);
  23.       printf("nouvelle valeure %s\n",place_final);
  24.       fputs(place_final,F1);
  25.       printf("ecriture fichier reussie\n" );
  26.       return 1;
  27.        }
  28.      else return 2;
  29.       /*fermeture du fichier*/
  30.       if(fclose(F1)==EOF){
  31.       fprintf(stderr,"Probleme de fermeture du fichier \n" );
  32.       exit(1);
  33.       printf(".................... fermeture du fichier \n" );
  34.         }
  35. exit(0);
  36.    }


 
Voila ma fonction j'ai mis pas mal de printf pour essayer de reperé ou ca blouqe mais apperment il effectue toute la fonction mais ne modifie rien au fichier.

mood
Publicité
Posté le 04-07-2010 à 16:45:24  profilanswer
 

n°2007011
Sve@r
Posté le 04-07-2010 à 23:03:51  profilanswer
 

Ce qu'il faut bien comprendre, c'est qu'un fichier c'est rien d'autre qu'une suite d'octets sur disque. Faut absolument que tu t'habitues à te représenter ton fichier non pas en nombre de lignes mais en caractères.
 
Donc si tu veux remplacer n caractères par n autres à partir de la position p, il te suffit de
- te déplacer sur la position p en utilisant fseek()
- écrire les n nouveaux caractères qui viendront remplacer les n autres
 
Maintenant si tu veux remplacer n caractères par m autres à partir de la position p, que m soit plus petit ou plus grand que n ta seule solution est
- recopier dans un second fichier les p premiers caractères du premier fichier
- écrire ensuite les m autres
- te déplacer dans le premier fichier de n caractères
- recopier enfin dans le second fichier les caractères restants du premier fichier
 
Accessoirement, tu quittes la fonction aux return sans avoir fermé ton fichier (écriture non finalisée => le fichier est écrit logiquement mais pas forcément physiquement sur le disque). De plus, tu quittes (encore ???) ta fonction (et le programme) par des exit ce qui est très mal. Seule la fonction main() est autorisée à utiliser exit. Pour les autres, c'est comme des poupées russes. Toute fonction appelée doit revenir à l'appelant. S'il y a un problème elle transmet le problème à l'appelant qui, si c'est le main, prendra une décision ou transmettra le problème à son propre appelant etc etc jusqu'au main.


Message édité par Sve@r le 04-07-2010 à 23:06:45

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°2007618
zdarbilo
Posté le 07-07-2010 à 00:16:18  profilanswer
 

Merci de ton aide en fin de compte j'ai optez pour la reecriture complete du fichier qui marche bien par contre sur un autre bout de code j'utilise un thread avec une fonction qui doit me renvoyer un int comment puis je recuperer cette valeur ?
mon code est de ce type :  
if(pthread_create(&num_thread,NULL,(void *(*)())test_spect,NULL)==-1)
 
c'est la fonction test_spect qui me retourne un int que je ne sais pas comment recuperer .
merci de ton aide

n°2008151
xilebo
noone
Posté le 08-07-2010 à 18:35:44  profilanswer
 

zdarbilo a écrit :

Merci de ton aide en fin de compte j'ai optez pour la reecriture complete du fichier qui marche bien par contre sur un autre bout de code j'utilise un thread avec une fonction qui doit me renvoyer un int comment puis je recuperer cette valeur ?
mon code est de ce type :  
if(pthread_create(&num_thread,NULL,(void *(*)())test_spect,NULL)==-1)
 
c'est la fonction test_spect qui me retourne un int que je ne sais pas comment recuperer .
merci de ton aide


 
 
La fonction pthread_join te permet d'attendre la fin de ton thread créé par pthread_create (fin de thread = terminaison de la fonction, ou bien un pthread_exit dans la fonction de thread).
 
Le 2nd paramètre de pthread_join te permet de récupérer la valeur de retour de ta fonction.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  modifier une ligne precise d'un fichier texte

 

Sujets relatifs
renommer un fichier sous ubuntuSupprimer contenu répertoire sauf 1 fichier
(JS)Vérifier si un serveur est en ligne avant de faire une redirectionTrier un fichier
Problème pour modifier la valeur d'une ligne dans un fichiersurligner totalité d'une ligne html
Suppression du fichier desktop.htt par VBSlancer une classe depuis un fichier bat
Plus de sujets relatifs à : modifier une ligne precise d'un fichier texte


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR