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 et ecriture d'un fichier


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut Lecture et ecriture d'un fichier
    salut
    j'ai un fichier d'entree que j'arrive dois lire
    j'ai envie d'ignorer les lignes contenant des char et je n'ai pas trouve comment faire donc pour l'instant je les efface a la main pour pouvoir executer mes calculs. J'aimerai savoir si quelqu'un saurait comment faire.

    Deuxieme point: a la fin de l'execution de mon programme je dois ecrire des donnees a la fin du fichier d'entree, pour cela j'ai trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        FILE *f;
        f=fopen("r1xtr.txt","w");
        fseek(f, 0, SEEK_END);
        fprintf(f,"exemple\n");
        fclose(f);
    le probleme c que ca m'efface mon fichier puis reecrit par dessus alors que je voulais ajouter mes resultats aux donnees d'entree.

  2. #2
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    j'ai envie d'ignorer les lignes contenant des char et je n'ai pas trouve comment faire donc pour l'instant je les efface a la main pour pouvoir executer mes calculs. J'aimerai savoir si quelqu'un saurait comment faire.
    Peux tu montrer le format de ton fichier?

    Deuxieme point: a la fin de l'execution de mon programme je dois ecrire des donnees a la fin du fichier d'entree, pour cela j'ai trouve

    Code :
    FILE *f;
    f=fopen("r1xtr.txt","w");
    fseek(f, 0, SEEK_END);
    fprintf(f,"exemple\n");
    fclose(f);le probleme c que ca m'efface mon fichier puis reecrit par dessus alors que je voulais ajouter mes resultats aux donnees d'entree.
    En principe, dans ton cas, on ouvre le fichier avec le mode "a" pour ajout en mode écriture à la fin du fichier.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    mon fichier d'entree est au format txt.
    je dois donc pour l'ecriture utiliser le format a au lieu de w c bien ca?

  4. #4
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    pour le a ca marche merci.

    mon fichier d'entree, c un fichier avec des coordonees de point, de chargements etc et moi je veux lire que les valeur et pas les commentaires, c'est du type:
    /hauteur
    30
    /charge
    2
    /coordonnees des points
    0 0
    5 0
    10 0
    ...

  5. #5
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    pour le a ca marche merci.

    mon fichier d'entree, c un fichier avec des coordonees de point, de chargements etc et moi je veux lire que les valeur et pas les commentaires, c'est du type:
    /hauteur
    30
    /charge
    2
    /coordonnees des points
    0 0
    5 0
    10 0
    A toi de gérer cela en lisant ligne par ligne ton fichier à coup de fgets().
    -> Soit tu vérifies dans un premier temps la chaine de caractère représentant le type de donnée qui va suivre à ta prochaine lecture, puis tu récupères celle-ci.
    -> Soit tu effectues une recopie de ce fichier ligne par ligne en excluant la recopie des lignes commencant par '/'.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    j'aimerais pouvoir faire ta 2e idee
    comment faire?
    si je fais un scanf puis je compare la valeur
    si tu pourrais m'eclairer

  7. #7
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par un passant Voir le message
    j'aimerais pouvoir faire ta 2e idee
    comment faire?
    En récupérant un code issu de la FAQ et en remplacant le caractère signifiant une ligne à supprimer pour adaptation à ton cas, on obtient ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
       char ligne[256];
       FILE* fIn;
       FILE* fOut;
     
       if((fIn= fopen("texte.txt", "r")) == NULL)
       {
          return EXIT_FAILURE;
       }
     
       if((fOut = fopen("texte.tmp", "w")) == NULL)
       {
          fclose(fIn);
          return EXIT_FAILURE;
       }
     
       while(fgets(ligne, sizeof ligne, fIn))
       {
          if(ligne[0] != '/')
          {
             fputs(ligne, fOut);
          }
       }
     
       fclose(fIn);
       fclose(fOut);
       rename("texte.tmp", "texte.txt");
       return EXIT_SUCCESS;
    }
    Comme tu vois, on ouvre le fichier en question et un fichier temporaire pour effectuer la recopie. On lit chaque ligne du fichier une par une à coup de fgets(). Pour chaque ligne lue, on vérifie le premier caractère. Si celui ci correspond à la suppression de ligne, on ne recopie pas cette ligne. A la fin, on renomme le fichier temporaire avec le nom du fichier initial afin de l'écraser.


  8. #8
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    merci je vais tester ca

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par un passant Voir le message
    salut
    j'ai un fichier d'entree que j'arrive dois lire
    j'ai envie d'ignorer les lignes contenant des char et je n'ai pas trouve comment faire donc pour l'instant je les efface a la main pour pouvoir executer mes calculs. J'aimerai savoir si quelqu'un saurait comment faire.

    Deuxieme point: a la fin de l'execution de mon programme je dois ecrire des donnees a la fin du fichier d'entree, pour cela j'ai trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        FILE *f;
        f=fopen("r1xtr.txt","w");
        fseek(f, 0, SEEK_END);
        fprintf(f,"exemple\n");
        fclose(f);
    le probleme c que ca m'efface mon fichier puis reecrit par dessus alors que je voulais ajouter mes resultats aux donnees d'entree.

    Je pense qu’on utilise seek pour ce positionnée dans un endroit prit dans le fichier.
    Mais ça c’est valable juste pour les fichiers binaires

  10. #10
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    ok merci

  11. #11
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    salut homeostasie dans le codeque tu m'a donne, la fonction rename ne marche pas.
    tout marche bien mais le fichier texte.tmp n'est pas renomme.

  12. #12
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    salut homeostasie dans le codeque tu m'a donne, la fonction rename ne marche pas.
    tout marche bien mais le fichier texte.tmp n'est pas renomme.
    Peux tu tester le retour de rename()?
    Si tu obtiens -1, il y a échec de l'opération et il serait interessant de voir le code d'erreur que contient errno.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <errno.h>
     
    ...
     
    int  iRet;
     
    if( (iRet = rename("texte.tmp", "texte.txt")) == -1 )
    {
       /* Le renommage a échoué */
       perror( "texte.tmp");
    }
    Sur le man de rename(), tu as la description des cas d'erreurs.

  13. #13
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    en fait ca m'arrange de ne pas modifier le fichier d'entree
    donc je le copie ds un fichier tmp.txt, je travaille dessus.
    merci

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

Discussions similaires

  1. lecture et ecriture dans un fichier PDF
    Par kha_yassine dans le forum Documents
    Réponses: 1
    Dernier message: 05/07/2007, 19h36
  2. Réponses: 4
    Dernier message: 19/02/2007, 18h58
  3. [C#]Lecture et Ecriture d'un fichier .xml
    Par debug dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/01/2006, 12h41
  4. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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