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 :

Copier Coller


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Copier Coller
    Bonjour,
    voila mon problème:
    Je souhaite copier les données (textes) contenues dans un fichier .dat pour les recopier dans un autre fichier qui comporte 2 ligne de plus (au tout début du fichier! Et oui à la fin c'était trop facile :-)) écrite par le programme.
    Qui aurat la meilleur astuce??

    Merci d'avance...

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    si j' ai bien compris, tu veux faire un programme qui etend un fichier qui contient dejà deux lignes.

    Si c' est ça, il te suffit d' ouvrir ce fichier en ecriture , et tu peux lire les données jusqu à la fin du fichier (feof()). Ensuite, tu peux recopié le contenu du second fichier à la suite du premier .

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    C bien ça.
    Mon problème c'est comment recopier facilement le contenu du 2ème fichier à la suite du premier.
    Sachant qu'il y a quelque chose comme 3000 lignes...

  4. #4
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    Citation Envoyé par gregterraz Voir le message
    C bien ça.
    Mon problème c'est comment recopier facilement le contenu du 2ème fichier à la suite du premier.
    Sachant qu'il y a quelque chose comme 3000 lignes...
    Il suffit de manipuler de curseur ouvert, le positioner à la fin de fichier :
    tu peut le faire à l'aide de la fonction fopen()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fopen("non_fichier.dat", "a+");
    "La créativité est faites d'attention et de respect pour les petits faits de la vie."

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je ne suis pas sûr d'avoir compris. Quel fichier doit être placé avant l'autre ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Eh bien c'est le fichier qui contient 3000 lignes qui doit etre copier aprè les 2 lignes du fichier que j'ai créé dans mon programme.
    J'ai trouvé une solution sur cette page:
    http://c.developpez.com/faq/?page=fi...ICHIERS_copier

    En changeant les w en a pour écrire à la fin.
    Sa marche pas mal, peut etre qu'il y a plus simple.

    Merci pour les première réponse....

  7. #7
    Membre régulier Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 122
    Points
    122
    Par défaut
    Apparemment, tu ouvres ton fichier final,
    1. tu copies tes deux lignes
    2. tu ouvres ton fichier a copier
    3. tu copies ligne a ligne jusque End Of File
    4. tu fermes tes deux fichiers ...
    Pourquoi les pierres carrées font elles des ronds dans l'eau ?

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Oui c'est ça

  9. #9
    Membre régulier Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 122
    Points
    122
    Par défaut
    Essaie un truc du genre:
    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
     
    #include <stdio.h>
     
     
    int main (int argn, char* argv[]){
     
    char tampon[256]="ma premiere ligne a copier";
    char second_tampon[256]="ma seconde ligne a copier";
     
    /*ou alors on les passe en argument ...*/
     
    FILE* pf=fopen("fichier_a_copier.dat","rt");
    FILE* fp=fopen("copie_du_fichier.dat","wt");
    char buffer[1024];
     
     
     
    fprintf(fp,"%s\n%s\n",tampon, second_tampon);
     
     while( fgets( buffer, 1024, pf) )
     {
    	fputs( buffer, fp);
     }
     
     close(pf);
     close(fp);
     
     remove("fichier_a_copier.dat");
     system("mv copie_du_fichier.dat fichier_a_copier.dat");
     
    return 0;
    }

    par contre sous Linux, attention au droits...
    et pour le system mv il y a surement mieux mais comme on quitte le programme juste après on s'en fou ...
    Pourquoi les pierres carrées font elles des ronds dans l'eau ?

  10. #10
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par yakamoneye Voir le message
    Essaie un truc du genre:
    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
     
    #include <stdio.h>
     
     
    int main (int argn, char* argv[]){
     
    char tampon[256]="ma premiere ligne a copier";
    char second_tampon[256]="ma seconde ligne a copier";
     
    /*ou alors on les passe en argument ...*/
     
    FILE* pf=fopen("fichier_a_copier.dat","rt");
    FILE* fp=fopen("copie_du_fichier.dat","wt");
    char buffer[1024];
     
     
     
    fprintf(fp,"%s\n%s\n",tampon, second_tampon);
     
     while( fgets( buffer, 1024, pf) )
     {
    	fputs( buffer, fp);
     }
     
     close(pf);
     close(fp);
     
     remove("fichier_a_copier.dat");
     system("mv copie_du_fichier.dat fichier_a_copier.dat");
     
    return 0;
    }

    par contre sous Linux, attention au droits...
    et pour le system mv il y a surement mieux mais comme on quitte le programme juste après on s'en fou ...
    Ceci est plus propre et compile:

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
        int err = 0;
        char tampon[256]="ma premiere ligne a copier";
        char second_tampon[256]="ma seconde ligne a copier";
     
        /* -tc- Les modes d'ouverture "rt" et "wt" ne sont pas standard. Utiliser
           "r" et "w" pour lire et respectivement ecrire dans un fichier texte */
        FILE* pf =fopen("fichier_a_copier.dat","rt");
        /* -tc- Toujours verifier l'ouverture du fichier */
        if (pf != NULL)
        {
            FILE* fp =fopen("copie_du_fichier.dat","wt");
            if (fp != NULL)
            {
                char buffer[1024];
     
                fprintf(fp,"%s\n%s\n", tampon, second_tampon);
     
                while (fgets(buffer, sizeof buffer, pf) != NULL)
                {
                    fputs(buffer, fp);
                }
                /* -tc- close() n'est pas standard. Utilise fclose() */
                fclose(fp), fp = NULL;
            }
            else
            {
                err = EXIT_FAILURE;
            }
            fclose(pf), pf = NULL;
        }
        else
        {
            err = EXIT_FAILURE;
        }
     
        if (err == 0)
        {
            /* -tc- rename() est standard et fait ce que tu veux */
            rename("copie_du_fichier.dat", "fichier_a_copier.dat");
        }
     
        return err;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  11. #11
    Membre régulier Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 122
    Points
    122
    Par défaut
    FILE* pf =fopen("fichier_a_copier.dat","rt");
    /* -tc- Toujours verifier l'ouverture du fichier */
    if (pf != NULL)
    J'oublie souvent ...
    Dans ce cas vérifions également que fputs ne renvoie pas EOF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     if( fputs( buffer, fp) == EOF )
     {
      perror(" fputs failed ! ");
      exit( EXIT_FAILURE);
     }
    Pourquoi les pierres carrées font elles des ronds dans l'eau ?

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 370
    Points : 41 521
    Points
    41 521
    Par défaut
    Attention, le "t" n'est pas portable et est inutile tant qu'on ne fait pas l'idiot avec le projet (et encore, je ne sais même pas s'il est encore possible de le faire sous Visual).
    Les fichiers texte, c'est "r" ou "w" tout court.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre régulier Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 122
    Points
    122
    Par défaut
    Merci, Medinoc c'est parce que j'ai l'habitude de travailler sous Linux
    Pourquoi les pierres carrées font elles des ronds dans l'eau ?

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci à tous sa marche

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

Discussions similaires

  1. [VB.NET] copier coller d'une valeur
    Par mic56 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/06/2004, 11h43
  2. [Swing]copier coller... dans le menu.
    Par parksto dans le forum Composants
    Réponses: 3
    Dernier message: 10/05/2004, 22h56
  3. Copier coller Fichier windows
    Par KPitN dans le forum Windows
    Réponses: 8
    Dernier message: 20/04/2004, 17h32
  4. Copier Coller une ligne d'une table avec modif ?
    Par nolan76 dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/03/2004, 16h34
  5. [Débutant] Conserver la couleur lors d'un copier coller
    Par ADIDASman dans le forum JBuilder
    Réponses: 2
    Dernier message: 21/05/2003, 18h13

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