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 :

concatener 2 fichiers


Sujet :

C++

  1. #1
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut concatener 2 fichiers
    bonjour,
    je voudrais savoir comment lire 2 ou pluesieurs fichiers txt avec ofstream ou autre méthode
    et concatener les 2 en un seul fichier txt
    en c ou c++
    j'ai trouvé ça
    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
     
    //une fonction qui recopie un fichier dans un autre :
     
    int copiefichier(char *dest, char *srce)
    // copie le fichier srce dans dest
    // renvoie 1 si ok, 0 sinon
    {
         ifstream fi(srce, ios::in|ios::binary);
         if (!fi) return 0;        // srce impossible à lire
         ofstream fo(dest, ios::out|ios::binary);
         if (!fo) return 0;
         char tampon;
         while ( fo && fi.get(tampon) )
               fo.put(tampon);
         return fo.good() && fi.eof();
    }
    mais je sais pas encore comment faire!!
    et ça
    http://h-deb.clg.qc.ca/Sujets/AuSeco...#copier-lignes
    merci

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    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
     
    ifstream	fic_in1,fic_in2 ;
    ofstrem         fic_out,
    char             tampon;
     
    fic_in1.open(path1);
    fic_in2.open(path2);
    fic_out.open(path3);
     
    while (!fic_in1.eof())
    {
          fic_in1>>tampon;
          fic_out<<tampon;
    }
    while (!fic_in2.eof())
    {
          fic_in2>>tampon;
          fic_out<<tampon;
    }
    fic_in1.close();
    fic_in2.close();
    fic_out.close();
    un truc du genre ca pourrait le faire, à adapter pour que çà marche.

  3. #3
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    j'ai corrigé 2 erreurs voila le code sans erreur mais il se plante, et ne s'arrète pas
    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
    #include <fstream>   // std::ifstream, std::ofstream
    #include <string>    // std::string, std::getline()
    #include <iostream>  // std::endl
     
    // std::ifstream, std::ofstream
    int main ()
    {
    	std::ifstream	fic_in1,fic_in2 ;
    	std::ofstream         fic_out;
    char  tampon;
     
    fic_in1.open("toto.txt");
    fic_in2.open("t2.txt");
    fic_out.open("t.txt");
     
    while (!fic_in1.eof())
    {
          fic_in1>>tampon;
          fic_out<<tampon;
    }
    while (!fic_in2.eof())
    {
          fic_in2>>tampon;
          fic_out<<tampon;
    }
    fic_in1.close();
    fic_in2.close();
    fic_out.close();
    }

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    peut etre que l'ouverture plante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (fic_in1.fail() ) //pas ouvert

  5. #5
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    ça marche nickel
    mais le probleme
    c'est qu'il ya pas de retour à la ligne aprés l'incrémentation
    merci

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    PARCE QUEEEEE!!!VENGEANCE!!! il faut bien secouer...oranginaaaaa

    ben ptetr que si l'ouverture plante c'est parce qu'il arrive pas a ouvrir..logique nan? lol

    sur ce je rentre!

    ps: si ton fichier d'entrée existe pas il pourra pas être ouvert.

  7. #7
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    dans le premier fichier
    j'ai:
    3
    4
    5

    dans le deuxième
    1
    2


    dans le troisième j'obtient:
    3455122

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::ifstream is1( "input1.txt" );
    std::ifstream is2( "input2.txt" );
    std::ofstream( "output.txt" ) << is1.rdbuf() << is2.rdbuf();
    Suivant la manière dont tu veux traiter les fichiers non trouvés tu pourras par exemple faire un truc comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( !is1 )
        std::cout << "input1.txt not found" << std::endl;
    MAT.

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    il reste quand même quelques remarques importantes (même si d'aucuns pourraient estimer qu'il s'agit de détails) à faire:

    ifstream et ofstream sont des classes.

    A ce titre, elles disposent de constructeurs, et de destructeurs, ce qui peut nous permettre d'ouvrir un fichier par le simple fait de déclarer une variable du type fstream, à condition de fournir les information nécessaires au constructeur.

    De plus, la classe ofstream (car c'est celle qui fera le plus gros du boulot) est une petite maligne: il est tout à fait possible -sous réserve de lui fournir les informations adéquates dans le constructeur ou dans la méthode open si vous y tenez vraiment - de lui faire savoir que ce que l'on attend d'elle est de rajouter des informations en bout de fichier.

    Cela implique, vous l'aurez sans doute deviné, que l'on ne veuille absolument pas s'inquiéter du contenu du fichier avant de commencer à y rajouter des informations, et que seul le contenu final (après ajout) puisse nous intéresser, mais, il semble a priori que ce soit bel et bien ce que fatjoe demande

    Enfin, il n'est a priori pas nécessaire de travailler caractère par caractère, étant donné qu'il n'est nulle part question de faire la moindre analyse du fichier que l'on souhaite ajouter à la fin de l'autre

    Au final, un code tout simple suffira, et il prendra une forme proche de
    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
    /* fonction permettant de concaténer deux fichier
     * @ in: src = nom du fichiers dans lequel aller chercher les informations 
     *             à rajouter
     *       dst = nom du fichier dans lequel faire les ajouts
     */
    void concatene(const std::string& src, const std::string& dst)
    {
        /* on ouvre le fichier de destination en mode "concaténation" */
        std::ofstream ofs(dst.c_str(),std::app);
        /* et le fichier source en mode lecture */ 
        std::ifstream ifs(str.c_str());
        /* il nous faudra une chaine de caractères récupérer chaque ligne
         * du fichier source
         */
        std::string str;
        /*tant que l'on arrive à lire quelque chose dans le fichier source, 
         * on recopie ce qu'on a lu dans le fichier de destination
         */
        while(std::getline(ifs,str))
        {
            ofs<<str;
        }
    }
    Et vous savez ce qui est intéressant avec ce code, les gars

    C'est que j'ai écrit beaucoup plus de commentaires que de code effectif ...

    Bien sur, il serait peut être pas mal de le sécuriser un peu (car je me suis basé sur le fait que le fichier source existait et que nous y avions accès sans restriction, et sur l'hypothèse que soit nous avions accès sans restriction au fichier existant de destination, soit nous avions les droits de le créer) mais un simple bloc try... catch permet de gérer les deux problèmes potentiels
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Concaténer deux fichiers Ligne/Ligne avec SH
    Par guiltouf dans le forum Linux
    Réponses: 7
    Dernier message: 22/05/2007, 14h35
  2. Concaténer plusieurs fichier pdf.
    Par gege2061 dans le forum Linux
    Réponses: 7
    Dernier message: 28/10/2006, 13h14
  3. Supprimer les dernieres lignes et concatener plusieurs fichier
    Par filsdugrand dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 11/04/2006, 21h15
  4. Concaténation de fichiers sous UNIX?
    Par airmax77 dans le forum Linux
    Réponses: 4
    Dernier message: 27/01/2006, 16h23
  5. [Script .BAT] Concatenation de fichiers plats
    Par Jokeur dans le forum Autres langages
    Réponses: 1
    Dernier message: 03/05/2005, 12h14

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