FORUM Tom's Hardware » Programmation » C / C++ / Java » Lecture/Ecriture ds un fichier en remplacant seulement certains termes
 

Lecture/Ecriture ds un fichier en remplacant seulement certains termes

Il y a 344 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Lecture/Ecriture ds un fichier en remplacant seulement certains termes
 
Plus d'informations

Bonjour à tous !
Alors voila, j'ai un soucis dans un programme.
Je voudrais pouvoir lire une ligne dans un fichier et remplacer certains mots de ce même fichier tout en conservant les termes qui n'ont pas été modifiés...
Pas sur que ce soit très clair... :heink:
Un exemple s'rait souhaitable je suppose... :D  

 

Alors voici mon fichier.h :

Code :
  1. typedef struct
  2. {    int noElv;    //numero de l'eleve
  3.     char code[5];    //inscription au code [oui/non]
  4. }Eleve;
  5. void enregDon (void);
  6. Eleve ficheRens(void);
  7. Eleve ficheInscr(void);


...ainsi que mon fichier.c :

Code :
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include "fichier.h"
  4. // Saisie des données de l'eleve
  5. void test1 (void)
  6. {
  7.     printf("\n\n" );
  8.     printf("------------------------------------------------------" );
  9.     printf("\n\t\tCompleter un dossier\n" );
  10.     printf("------------------------------------------------------" );
  11.     printf("\n\n" );
  12.     enregDon();
  13. }
  14. void enregDon (void)
  15. {
  16.     char validation;
  17.     FILE*fe;
  18.     Eleve e;
  19.     int a,choixCompletDoss;
  20.     printf("- [1] Creer un dossier\n" );
  21.     printf("- [2] Modifier la fiche de renseignements\n" );
  22.     printf("- [3] Modifier la fiche d'inscription\n" );
  23.     printf("\tChoix : " );
  24.     scanf("%d",&choixCompletDoss);
  25.     fe=fopen("fichier.txt", "a+" );
  26.     if (fe==NULL)
  27.     {    printf("Erreur d'ouverture en ecriture\n" );
  28.         return;
  29.     }
  30.     fscanf(fe,"%d %s",&e.noElv,e.code);
  31.     if(choixCompletDoss==1)
  32.     {    e=ficheRens();
  33.         e=ficheInscr();
  34.     }
  35.     if(choixCompletDoss==2)
  36.         e=ficheRens();
  37.     if(choixCompletDoss==3)
  38.         e=ficheInscr();
  39.     printf("Valider la saisie des nouvelles données [o/n] : " );
  40.     scanf("%*c%c",&validation);
  41.     if(validation=='o')
  42.         fprintf(fe,"%d\t%s\n",e.noElv,e.code);
  43.     fclose(fe);
  44. }
  45. Eleve ficheRens(void)
  46. {    Eleve e;
  47.     printf("-Fiche de Renseignements-\n" );
  48.     printf("Numero identifiant : " );
  49.     scanf("%d",&e.noElv);
  50.     return e;
  51. }
  52. Eleve ficheInscr(void)
  53. {    Eleve e;
  54.     printf("-Inscription [oui/non]-\n" );
  55.     printf("Code       : " );
  56.     scanf("%s",e.code);
  57.     return e;
  58. }
  59. int main(void)
  60. {
  61.     test1();
  62.     return 0;
  63. }


...et enfin mon fichier.txt :

Code :
  1. 1245     non


Donc le problème n'est pas l'écriture des fichiers remplacés, mais la réécriture des variables qui n'ont pas été modifiées...ça me marque n'importe quoi en fait !
Et pour l'instant, on va dire que j'me contenterais de réécrire la ligne souhaitée en dessous, j'verrais plus tard comment supprimer l'ancienne ligne.

 

Une idée ? :??:

 

En vous remerciant... ;)

  

(Un modérateur a modifié les lignes 10 et 12 pour raccourcir les suites de caractères - beaucoup trop longues)


Message édité par zeb le 04-12-2007 à 10:41:37

pourquoi faire cent fois la même chose ?
Plus d'informations

Citation :

ça me marque n'importe quoi en fait !


''n'importe quoi'' n'est pas de l'informatique.
 
vu le code je pense simplement qu'il ajoute des lignes plutôt que d'en modifier ... j'ai juste ?

Plus d'informations

euh ... bah alors disons qu'il me marque tout sauf ce que j'attends ! :)
Et oui, en effet, il ajoute des lignes ... mais qui prennent en compte la ligne précédente dirons nous.
Donc si tu as la solution tant qu'à faire pour effacer les lignes "anciennes" ou pour les modifier directement, j'suis preneur, mais disons que j'ai pas vraiment eu encore le temps d'y réfléchir ;) ...

pourquoi faire cent fois la même chose ?
Plus d'informations

Il fait pas ce que tu attend mais il fait ce que tu lui dit.
 
Mon avis c'est qu'on peut pas simplement ''modifier'' ou ''supprimer'' une ligne.
une ligne c'est qu'une représentation commode d'une suite de bytes. on peut pas supprimer simplement une ligne. sinon y a un trou. et pour boucher le trou il faut décaler tout ce qu'il y a après. C'est même pas la peine d'y penser.
 
C'est pour ça que les logiciels ne travaillent pas directement sur un fichier, mais travaillent en mémoire, pour écrire une fois après avoir modifié la mémoire.
 
Tu a le choix :
- Ou bien tu fait comme tout les autres programmes : tu charge en mémoire les infos de ton fichier, tu modifie dans la mémoire puis tu sauve avant de quitter.
 
- Ou bien tu réécrit tout ton fichier à chaque modification, dans ce cas il faut que tu regarde si tu n'a pas déja une ligne dans ton fichier, si non tu ajoute simplement ta ligne, si oui tu crée un fichier temporaire, tu écrit tout ce qu'il y a dans ''fichier.txt'' sauf la ligne que tu veut modifier, tu y ajoute ta ligne, et tu remplace ''fichier.txt'' par ce nouveau fichier. puis tu supprime le fichier temporaire qui sert plus à rien.
(simple non ?)

guich
Plus d'informations

+1 Batchy
Tout charger dans la mémoire, pour pouvoir traiter les informations aprés (le tps de réponse est également bien meilleur, c'est fait pour ...). Lorsque c'est modifier, tu réécris dans ton fichier. Et évite le langage sms tel que [s'rait] ou [j'verrais]. Et dernière chose, cible ton problème au lieu d'envoyer tout les scripts, fais en de nouveaux s'il faut, mais cible l'erreur, la solution n'arrivera que plus vite ;)


---------------
www.guich.fr
Plus d'informations

guillaumech a écrit :

+1 Batchy
Tout charger dans la mémoire, pour pouvoir traiter les informations aprés (le tps de réponse est également bien meilleur, c'est fait pour ...). Lorsque c'est modifier, tu réécris dans ton fichier. Et évite le langage sms tel que [s'rait] ou [j'verrais]. Et dernière chose, cible ton problème au lieu d'envoyer tout les scripts, fais en de nouveaux s'il faut, mais cible l'erreur, la solution n'arrivera que plus vite ;)


 :pfff: Mais c'est pas croyable ça ... t'as rien d'autre à faire que de v'nir nous souler avec tes remarques inutiles ?!
T'as quelque chose à m'dire ? bah c'est en face que tu l'fais, j'crois qu'on s'croise encore 5 jours par semaines ça devrait être suffisant ...  
On est plus censé s'adresser la parole ok, mais si tu tiens vraiment à l'faire alors on en parle face à face...prends tes responsabilités un peu, reste pas derrière ton écran d'ordinateur t'es limite pitoyable  ;)  :hello:

Plus d'informations

Batchy a écrit :

Il fait pas ce que tu attend mais il fait ce que tu lui dit.
 
Mon avis c'est qu'on peut pas simplement ''modifier'' ou ''supprimer'' une ligne.
une ligne c'est qu'une représentation commode d'une suite de bytes. on peut pas supprimer simplement une ligne. sinon y a un trou. et pour boucher le trou il faut décaler tout ce qu'il y a après. C'est même pas la peine d'y penser.


 :hello: Ok, j'te remercie de ta réponse ...
J'vais regarder un peu comment faire tout ça  ;)

guich
Plus d'informations

jb63-- a écrit :

:pfff: Mais c'est pas croyable ça ... t'as rien d'autre à faire que de v'nir nous souler avec tes remarques inutiles ?!
T'as quelque chose à m'dire ? bah c'est en face que tu l'fais, j'crois qu'on s'croise encore 5 jours par semaines ça devrait être suffisant ...  
On est plus censé s'adresser la parole ok, mais si tu tiens vraiment à l'faire alors on en parle face à face...prends tes responsabilités un peu, reste pas derrière ton écran d'ordinateur t'es limite pitoyable  ;)  :hello:


Réponse hors sujet  ! Parcours le forum, et tu veras que les régles sont strictes, pas de langages sms, pas de code copier coller comme ça ... Et la diplomatie est également  de la partie. J'ai répondu comme je l'aurais fait pour n'importe quelle autre personne, et je pense pas me tromper. Alors pour ce genre de reflexion, c'est en dehors du forum. Moi j'ai répondu, avec aucune agressivité, à ton problème, comme te le dira je pense beaucoup de personne qui auront la possibilité de lire ce topic.
J'attend que le "nous" (en dehors que toi) se manifeste :)
 
Guich


---------------
www.guich.fr
Plus d'informations

Traiter un fichier en mémoire ? Drôle d'approche...
Et en passant par un fichier ini tout simplement ?

pourquoi faire cent fois la même chose ?
Plus d'informations

PAPINADE a écrit :

Traiter un fichier en mémoire ? Drôle d'approche...
Et en passant par un fichier ini tout simplement ?

On est en 2007 quand même ...
si y a quelque chose d'externe à utiliser, c'est de quoi interroger une base de donnée genre liteSQL

Profil : Pointeur
Plus d'informations

jb63-- a écrit :

:pfff: Mais c'est pas croyable ça ... t'as rien d'autre à faire que de v'nir nous souler avec tes remarques inutiles ?!
T'as quelque chose à m'dire ? bah c'est en face que tu l'fais, j'crois qu'on s'croise encore 5 jours par semaines ça devrait être suffisant ...  
On est plus censé s'adresser la parole ok, mais si tu tiens vraiment à l'faire alors on en parle face à face...prends tes responsabilités un peu, reste pas derrière ton écran d'ordinateur t'es limite pitoyable  ;)  :hello:


 

guillaumech a écrit :

Réponse hors sujet  ! Parcours le forum, et tu veras que les régles sont strictes, pas de langages sms, pas de code copier coller comme ça ... Et la diplomatie est également  de la partie. J'ai répondu comme je l'aurais fait pour n'importe quelle autre personne, et je pense pas me tromper. Alors pour ce genre de reflexion, c'est en dehors du forum. Moi j'ai répondu, avec aucune agressivité, à ton problème, comme te le dira je pense beaucoup de personne qui auront la possibilité de lire ce topic.
J'attend que le "nous" (en dehors que toi) se manifeste :)
 
Guich


 
réglez vos problemes en privé, sinon j'envoi tout le monde chez les TT


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Profil : Pointeur
Plus d'informations

et sinon pour ton problème, c'est juste une histoire de pointeur ...


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

Batchy a écrit :

On est en 2007 quand même ...


 
Arff, désolé j'avais complètement oublié...parkinson me guette ! ;)

Plus d'informations

KangOl a écrit :

et sinon pour ton problème, c'est juste une histoire de pointeur ...


Une histoire de pointeur ... ?
Ce qui voudrait dire qu'il est tout de même possible de remplacer le contenu de certaines variables tout en conservant celui de variables non modifiées ?
Mais pour l'hitsoire des pointeurs, j'dois avouer que je ne vois pas ...  :??:

Plus d'informations

Batchy a écrit :

On est en 2007 quand même ...
si y a quelque chose d'externe à utiliser, c'est de quoi interroger une base de donnée genre liteSQL


Euuuuh ... disons que l'on a pas encore vu les bases de données en cours ... donc jusqu'à maintenant j'me débrouillais avec les "bases" qu'on nous avait appris en algo'  :whistle:

guich
Plus d'informations

KangOl a écrit :

réglez vos problemes en privé, sinon j'envoi tout le monde chez les TT


Je suis d"accord avec toi, sinon je n'aurais pas soulever le problème en disant ça :

Citation :

Alors pour ce genre de reflexion, c'est en dehors du forum


Sinon pour le problème, quelle est la différence entre une fiche d'inscription et une fiche de renseignement dans ton  script ? Charges la ligne voulue, conserve son numéro de position, traite ta ligne à pars, et replace là dans le fichier à l'aide de son numéro de position. Toutes les autres restent inchangés.


---------------
www.guich.fr
pourquoi faire cent fois la même chose ?
Plus d'informations

il faut que la taille de ses lignes restent la même aussi ...

Plus d'informations

Batchy a écrit :

il faut que la taille de ses lignes restent la même aussi ...


 
Bien sûr que non...encore une fois regardez comment on gére un fichier INI.

pourquoi faire cent fois la même chose ?
Plus d'informations
n°36935
02-12-2007 à 17:16:45
Masquer