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 :

copie d'un fichier texte vers un autre


Sujet :

C

Vue hybride

H-bil copie d'un fichier texte vers... 02/01/2008, 22h41
homeostasie Bonjour, Il serait déjà... 03/01/2008, 10h48
Sve@r Déjà vérifier jute après les... 03/01/2008, 11h08
Emmanuel Delahaye Tu as remarqué que tu... 03/01/2008, 11h45
H-bil merci :D j'avais oublier de... 03/01/2008, 20h42
Emmanuel Delahaye Il y a un problème de codage.... 03/01/2008, 21h20
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de H-bil
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Par défaut copie d'un fichier texte vers un autre
    salut
    j'essaie de copier quelques lignes d'un fichier texte vers un autre fichier
    et voila le code simple qui permet l'ajout au premier fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        FILE *fich;
        fich=fopen("matriceCreuse.txt","a");
        fprintf(fich,"%d\n",l);
        fprintf(fich,"%d\n",c);
        fprintf(fich,"%d\n",v);
        fclose(fich);
    et celui-la de copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        FILE *fich,*fichTemp;
        fich=fopen("matriceCreuse.txt","r");
        fichTemp=fopen("matriceCreuse.temp.txt","a");
     
        fscanf(fich,"%d",&x);
        fscanf(fich,"%d",&y);
        fscanf(fich,"%d",&z);
    //tous passe bien jusqu'à cette ligne
    //le reste ne donne aucune résultat
        fprintf(fichTemp,"%d",x);
        fprintf(fichTemp,"%d",y);
        fprintf(fichTemp,"%d",z);
    il est ou le problème

    merci d'avance

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Bonjour,

    Il serait déjà nécessaire de tester le retour de toutes tes fonctions d'ouverture, d'écriture et de lecture d'un flux.


  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par H-bil Voir le message
    salut
    j'essaie de copier quelques lignes d'un fichier texte vers un autre fichier
    et voila le code simple qui permet l'ajout au premier fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        FILE *fich;
        fich=fopen("matriceCreuse.txt","a");
        fprintf(fich,"%d\n",l);
        fprintf(fich,"%d\n",c);
        fprintf(fich,"%d\n",v);
        fclose(fich);
    et celui-la de copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        FILE *fich,*fichTemp;
        fich=fopen("matriceCreuse.txt","r");
        fichTemp=fopen("matriceCreuse.temp.txt","a");
     
        fscanf(fich,"%d",&x);
        fscanf(fich,"%d",&y);
        fscanf(fich,"%d",&z);
    //tous passe bien jusqu'à cette ligne
    //le reste ne donne aucune résultat
        fprintf(fichTemp,"%d",x);
        fprintf(fichTemp,"%d",y);
        fprintf(fichTemp,"%d",z);
    il est ou le problème

    merci d'avance
    Déjà vérifier jute après les fscanf() que t'as les bonnes valeurs. Tu dis que tout se passe bien donc on va admettre mais un "printf()" serait plus rassurant. Ensuite peut-être aussi rajouter soit un fflush(), soit un fclose(), soit du "\n" pour que l'écriture soit réellement faite dans le fichier. Et bien entendu, comme l'a dit Homeostasie, vérifier que le fopen() a été correctement fait...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par H-bil Voir le message
    il est ou le problème
    Tu as remarqué que tu n'enregistrais pas de '\n'.
    As-tu bien fermé les fichiers ?

  5. #5
    Membre éclairé Avatar de H-bil
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    As-tu bien fermé les fichiers ?
    merci
    j'avais oublier de fermer les fichier

    j'ai un autre petit problème avec ce 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
     
        while(!feof(fich))
        {
            unsigned x,y;
            int z;
            fscanf(fich,"%d",&x);
            fscanf(fich,"%d",&y);
            fscanf(fich,"%d",&z);
            if(x==l && y==c)
            {
                fprintf(fichTemp,"%d\n",x);
                fprintf(fichTemp,"%d\n",y);
                fprintf(fichTemp,"%d\n",v);
            }
            else
            {
                fprintf(fichTemp,"%d\n",x);
                fprintf(fichTemp,"%d\n",y);
                fprintf(fichTemp,"%d\n",z);
            }
        }
    les 3 dernières valeur du fichier sont copiées 2 fois vers le 2ème fichier


    [edit]
    comment empêcher la dernière itération de la boucle while de s'executer car il y'a un retour à la ligne à la fin du fichier.
    un apres fscanf() fait l'affaire
    @+
    [/edit]

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par H-bil Voir le message
    j'ai un autre petit problème avec ce 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
     
        while(!feof(fich))
        {
            unsigned x,y;
            int z;
            fscanf(fich,"%d",&x);
            fscanf(fich,"%d",&y);
            fscanf(fich,"%d",&z);
            if(x==l && y==c)
            {
                fprintf(fichTemp,"%d\n",x);
                fprintf(fichTemp,"%d\n",y);
                fprintf(fichTemp,"%d\n",v);
            }
            else
            {
                fprintf(fichTemp,"%d\n",x);
                fprintf(fichTemp,"%d\n",y);
                fprintf(fichTemp,"%d\n",z);
            }
        }
    les 3 dernières valeur du fichier sont copiées 2 fois vers le 2ème fichier


    comment empêcher la dernière itération de la boucle while de s'executer car il y'a un retour à la ligne à la fin du fichier.
    Il y a un problème de codage. feof() ne fait pas ce que tu crois. En C, il faut tester chaque fonction de lecture. Ce sont elles qui retournent une valeur particulière qui signifie 'fin de lecture'. C'est pour ça qu'on évite de multiplier les fonctions de lecture comme tu l'as fait, car ça fait du travail de test et de traitement en plus...

    Si il faut lire des valeurs 3 par 3, on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       while (fscanf(fich,"%d%d%d", &x, &y, &z) == 3)
       {
       }
    Mais quand c'est un fichier texte, on préfère en général se caler sur une structure 'ligne' avec fgets()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       char ligne [128];
     
       while (fgets(ligne, sizeof ligne, fich) != NULL)
       {
          if (sscanf(ligne,"%d%d%d", &x, &y, &z) == 3)
          {
              /* traitement des valeurs lues.*/
          }
       }

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

Discussions similaires

  1. [XL-2010] Copie automatique de certaines feuilles vers un autre fichier
    Par fra7878 dans le forum Excel
    Réponses: 10
    Dernier message: 20/01/2015, 16h15
  2. Réponses: 1
    Dernier message: 08/10/2014, 10h23
  3. Réponses: 1
    Dernier message: 28/03/2007, 11h38
  4. copie d'une zone de texte vers une autre zone de texte
    Par db48752b dans le forum Access
    Réponses: 7
    Dernier message: 23/08/2006, 08h41
  5. [sql2k][dts] : copie fichier texte vers table
    Par gatsu07 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/06/2006, 10h53

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