IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Lecture/ecriture fichier txt


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Lecture/ecriture fichier txt
    Bonjour,

    Je suis en train de faire un projet informatique et dans le programme je dois lire et modifier un fichier texte.

    Le contenu de mon fichier texte est:

    1;MIZGIER;Kurt;1000;4321;0;
    2;MIZGIER;Alex;1000;5645;0;

    L'idée est de modifier par exemple le nombre 1000 de la deuxième ligne à un autre nombre.

    Je connais plus ou moins les modes d'accès ("r", "w","r+", etc) et comment faire pour lire une ligne (fscanf), écrire une ligne (fputs) ainsi que les caractères (fgetc et fputc) mais je n'arrive pas à voir comment faire ici.

    Avant tout le mode d'accès doit-il être "r+"?

    Puis pour lire et modifier je pense à deux solutions:

    1. Lire la ligne avec fscanf et la mettre dans char chaine[n], puis parcourir chaine si le premier caratère de chaine correspond à la ligne cherchée donc on parcourt caractère par caractère et on modifie ce qui est voulu et on remet chaine dans la ligne qui correspond dans le fichier texte. (dans ce cas là quels fonctions utiliser mettre chaine dans la ligne qu'il faut du fichier texte?

    2. Lire caractère par caractère directement du fichier texte et modifier ce qui est voulu. (dans ce cas là quels fonctions utiliser pour se placer dans la ligne qu'on souhaite et modifier les caractères voulus?...)


    Merci par avance.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    En fait, les deux possibilités envisageables sont

    - Lire le fichier, écrire les données modifiées dans un autre fichier, détruire l'ancien et renommer le nouveau

    - Modifier le fichier d'origine par lecture/écriture, solution que tu envisages dans ton post. Mais il faut être prudent : ce que tu réécris doit avoir la même longueur que ce que tu as lu. Si c'est plus long, tu vas écraser le début de la ligne suivante. Si c'est plus court, il te restera en fin de fichier des séquelles du fichier avant modification.

    Si cette condition n'est pas scrupuleusement remplie, cette méthode est à éliminer.

    Si tu l'adoptes, tu devra faire usage de ftell() (pour obtenir la position courante dans le fichier), de fgets() (pour lire une ligne), de fseek() avec une position SEEK_SET et un offset de 0 ou d'une valeur obtenue par ftell() (pour repositionner le fichier) et de fputs() pour réécrire dans le fichier.

    A noter que pour passer de lecture en écriture, tu dois appeler avant l'écriture une fonction de positionnement du fichier comme fseek() et pour passer d'écriture en lecture, tu dois appeler avant la lecture une fonction de positionnement du fichier comme fseek() ou de vidage du buffer fflush()
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci beaucoup pour la réponse, j'ai tenté la deuxième solution et ça marche très bien.

    Il me reste juste un truc que je n'arrive pas à faire, c'est si j'arrive à la fin de la ligne comment sauter à la prochaine ligne? J'ai essayé en utilisant fgetc mais une fois qu'il arrive en fin de ligne il ne saute pas à la prochaine ligne. Ça reste avec la valeur -1 ce qui est normal, mais je dois faire si fgetc == -1 donc saute à la prochaine ligne...

    Merci par avance.

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    S'il ne va pas à la prochaine ligne, c'est tout simplement qu'il n'y a plus de ligne suivante. Déjà, ce qu'on entend par ligne en C, c'est une suite de caractères terminée par un '\n'. Si t'as un fichier qui comporte "une seule ligne" (ligne dans le langage non C-iste), et que cette ligne ne comporte pas de '\n' à la fin, alors vu d'un programme C, ce fichier contient 0 ligne (ce qui ne signifie pas 0 caractères) et non une ligne.

    Le -1 retourné par fgetc est sans doute la valeur de EOF dans ton implémentation.

    Il y a beaucoup de concepts, parfois très subtils, autour des fichiers en C mais ils ne sont pas bien compliqués, il faut juste les savoir. Si t'as le temps pour un peu de lecture, voici quelques liens qui pourraient t'intéresser :

    Les fichiers en langage C
    [FAQ ] Les E/S en C

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Ton fichier ressemble à un type CSV ou s'en approche, cas traité (uniquement en lecture) dans mon dernier tutoriel, ca peut au moins te donner une idée pour la lecture (avec quelques modifications) : Extraction d'informations depuis un fichier de données en C !

    Le but étant de lire le fichier ligne par ligne au lieu de s'embêter avec fgetc, de toute manière tu dois transvaser le tout dans un second fichier pour la modification. Une fois la ligne lue tu peux en faire ce que tu veux si tu as un buffer assez grand bien entendu
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour les réponses. Après avoir essayé et re-essayé la première solution, la deuxième ça marche à tous les coups et sans aucun problème.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Lecture/Ecriture fichier txt - Problème caractères spéciaux
    Par Blencastreur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/06/2012, 18h08
  2. Lecture et ecriture fichier txt
    Par jeanmy dans le forum Delphi
    Réponses: 12
    Dernier message: 07/08/2006, 17h23
  3. PL/SQL lecture/ecriture fichier txt
    Par stos dans le forum PL/SQL
    Réponses: 2
    Dernier message: 19/05/2006, 12h19
  4. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22
  5. [LG]Lecture-ecriture fichier
    Par arno15 dans le forum Langage
    Réponses: 19
    Dernier message: 03/02/2005, 22h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo