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 puis ecriture dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut lecture puis ecriture dans un fichier
    Bonjour,

    J'aimerais faire un programme en c qui lit dans un fichier texte des données puis qui reprend ces données et les ecris dans un autre fichier texte. J'arrive à lire les données mais pas à les réécrire dans un autre fichier. J'aurais besoin d'un coup de pouce.

    voici mon code :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char ** lecture_fichier(FILE *,char *);
    void afficher_lecture(char **);
     
    int main(void)
    {
     
    char tableau[20];
    FILE *f1;
    FILE *f3;
    char **matrice_lecture;
    char **matrice_ecriture;
     
    f1=fopen("f1.txt","r");
         if(f1==0){printf("Il n'y a pas de fichier f1");}
     
    matrice_lecture=lecture_fichier(f1,tableau);
     
    fclose(f1);
     
    /*f3=fopen("f3.txt","a");
    matrice_ecriture=lecture_fichier(f3,tableau);
     
    fclose(f3);
    */
     
    afficher_lecture(matrice_lecture);
     
    printf("\n\n");
    system("pause");
     
    }
     
    char ** lecture_fichier(FILE *f,char *t)
    {
     
    static char* p[6];
    int i;
     
         for(i=0;i<6;i++)
         {
                p[i]=(char*)malloc(24);
         }
     
         i=0;
         while(fgets(t,50,f)!=0)
         {
                strcpy(p[i],t);
                i++;
         }
     
    return(p);   
     
    }
     
    void afficher_lecture(char **m)
    {
         int i=0;
         while(i<6)
         {    
             printf("%s\n",m[i]);
             i++;
         }
    }
    le fichier texte en question est de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DUPOND              2002
    MARTINI             2120
    DURANDAL            2206
    DUBESSON            1913
    YACA                1801
    SOLORA              2013
    apres avoir lu les données du fichier f1.txt, j'ai essayé de réutilisé ma fonction lecture_fichier pour les écrire dans le fichier f3.txt mais il m'affiche êM> à la place et il n'écris rien.

    En faite vu que les données sont écris dans la mémoire avec le malloc, il y a moyen de les récupérer pour les réécrire.

    merci d'avance

    tchao

  2. #2
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    j'ai changé de stratégie et réecris une fonction ecriture_fichier avec un fputs mais le probleme est qu'il arrive à ecrire dans f3 une seule chaine, la derniere.
    Je comprend pas.

    mon code :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char ** lecture_fichier(FILE *,char *);
    char ** ecriture_fichier(FILE *,char *);
    void afficher(char **);
     
    int main(void)
    {
     
    char tableau[20];
    FILE *f1;
    FILE *f3;
    char **matrice_lecture;
    char **matrice_ecriture;
     
    f1=fopen("f1.txt","r");
         if(f1==0){printf("Il n'y a pas de fichier f1");}
     
    matrice_lecture=lecture_fichier(f1,tableau);
     
    fclose(f1);
     
    f3=fopen("f3.txt","a");
    matrice_ecriture=ecriture_fichier(f3,tableau);
    fclose(f3);
     
    afficher(matrice_ecriture);
     
    printf("\n\n");
    system("pause");
     
    }
     
    char ** lecture_fichier(FILE *f,char *t)
    {
     
    static char* p[6];
    int i;
     
         for(i=0;i<6;i++)
         {
                p[i]=(char*)malloc(24);
         }
     
         i=0;
         while(fgets(t,50,f)!=0)
         {
                strcpy(p[i],t);
                i++;
         }
     
    return(p);   
     
    }
     
    void afficher(char **m)
    {
         int i=0;
         while(i<6)
         {    
             printf("%s\n",m[i]);
             i++;
         }
    }
     
     
    char ** ecriture_fichier(FILE *f,char *t)
    {
     
    static char* p[6];
    int i=0;
     
         while(fputs(t,f)!=0)
         {
                strcpy(p[i],t);
                i++;
         }
     
    return(p);   
    }
    Et lorsque je veux afficher les valeurs écrites ( matrice_ecriture ), il m'affiche NULL.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    avant de te lancer dans des choses complexes, relis tes cours, et pratique sur un exemple simple

  4. #4
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Ca ca m'aide pas beaucoup, mais bon jvé m'en contenter pour l'instant.
    C'est déjà ce que je fais.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    bon je vais te donner quelques indications :

    1. Pourquoi 6 lignes en dur ? Tu sais que ton fichier ne contiendra que 6 lignes ?
      Si tu ne le sais pas, il faut les compter avant d'allouer

    2. En plus cela permet de ne pas avoir de variables statiques (fortement déconseillées)

    3. Même chose pour le 24. Pourquoi alloues-tu 24 alors que tu lis dans 50 ?

    4. Le retour de fgets n'est pas 0, mais NULL

    5. Pourquoi l'écriture aurait besoin d'utre chose que ce qui a été lu ?

    6. Pourquoi ne pas ressortir le nombre de lignes lues et le passer aux routines qui en ont besoin ?


    en gardant ton "esprit", je ferais ceci comme fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
     
    matrice_lecture=lecture_fichier(f1, &nbr_lignes);
     
    ... 
     
    statut =ecriture_fichier(f3,matrice_lecture, nbr_lignes);
     
    .....
     
    afficher(matrice_ecriture, nbr_lignes);

  6. #6
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Pour la fonction fgets, j'ai mis 50 parce que lorsque je mettais 24, le programme ne voulais pas fonctionnais. D'ailleurs je n'ais pas compris pourquoi. Il ne tourne qu'avec 26 au minimum donc g mis plus pour etre a l'aise pour l'instant.

    Et puis,
    Pourquoi 6 lignes en dur ? Tu sais que ton fichier ne contiendra que 6 lignes ?
    Si tu ne le sais pas, il faut les compter avant d'allouer
    oui, le fichier f1 ne doit contenir que cela. Normalement je dois aussi avoir un fichier f2 d'apres l'énonncer, et concatener les deux dans le fichier f3 et puis trier par nom. Mais pour l'instant, je commence juste avec le f1.

    En plus cela permet de ne pas avoir de variables statiques (fortement déconseillées)
    C'est vrai, mais pour l'instant, je souhaite que le tout fonctionne, apres je m'interesserais au superflu. Ce n'est qu'un exercice. Ce n'est pas un programme pour la nasa. Je ne suis pas encore expert en c, je souhaite que mon prog tourne avant tout.

    Mais je ne comprend pas pourquoi la fonction fputs ne me réécris que la derniere chaine ? Le programme fonctionne bien pour la fonction fgets, pourquoi pas pour le fputs !!!

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

Discussions similaires

  1. Lecture et Ecriture dans un fichier Excel
    Par qiqi1111 dans le forum C++
    Réponses: 2
    Dernier message: 18/12/2008, 19h10
  2. lecture et ecriture dans un fichier PDF
    Par kha_yassine dans le forum Documents
    Réponses: 1
    Dernier message: 05/07/2007, 19h36
  3. Réponses: 4
    Dernier message: 19/02/2007, 18h58
  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