C++ classe fichiers Pour 1 semaine

Résolu
velderama Messages postés 203 Statut Membre -  
velderama Messages postés 203 Statut Membre -
Bonjour a tous.
Je dois réaliser un projet qui etant donné 2 fichiers texte passés en parametres , de comparer tous les mots de plus de 3 caracteres présents dans les 2 fichiers de les ainsi que leurs positions en terme de caracteres par rapport au début du fichier!
Toutefois j'aurai penser pouvoir le faire en java mais on nous impose de le faire sous c++.
Je sais ça ne doit pas etre compliqué mais vu que j'ai jamais fait de C++ et qu'on a une semaine
je ne c'est pas comment faire...
SI quelqun peut m'aider cela m'aiderait beaucoup.MERCI
Configuration: Windows XP
Firefox 0.8

10 réponses

  1. <yassou> Messages postés 589 Date d'inscription   Statut Membre Dernière intervention   75
     
    0
    1. velderama Messages postés 203 Statut Membre 10
       
      Merci mais moi c'est plutot les manipulations de classes (importation d'une classe exterieur,methodes exterieur...)
      J'ai essayé mais c'est vraiment different du java que je connais mieux.
      0
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Je voi le problème : trop de style java pour le C++.
    Oublie la notion d'importation de class. En C++ il faut redéclarer à chaqu foi l'ensemble de la class, ce qui est facilité par l'emploi de #include <machin.h>.
    Pour avoir discuter avec un programmeur Java, il faut voir qu'en C++ il y a pas mal de choses qui existent en dehors de class (si si c'est possible), en particulier des fonctions.
    0
  3. velderama Messages postés 203 Statut Membre 10
     
    Bon je mettre où jen suis.La je veux faire 2 classes au debut pour tester si le fichier est bon!
    une classe VerificationFichiers.cpp(avec sa classe séparée "header"VerificationFichiers.h) et une classe main qui lance le programme:

    VerificationFichiers.h

    #define VERIFICATIONFICHIERS_H
    #ifndef VERIFICATIONFICHIERS_H
    using namespace std;
    class VerificationFichiers
    {
    public :
    ifstream fichier1; // Fichier1 en lecture
    ifstream fichier2; // Fichier2 en lecture
    VerificationFichiers();
    bool EstOkFichierRef(ifstream fichier);//Test si le fichier1 est bon
    bool EstOkFichierOcr(ifstream fichier);//Test si le fichier2 est bon
    //Constructeurs//
    VerificationFichiers();
    VerificationFichiers(ifstream f1,ifstream f2);
    };
    #endif
    0
  4. velderama Messages postés 203 Statut Membre 10
     
    Puis la classe VerificationFichiers.cpp

    #include "VerificationFichiers.h"
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <stdlib.h>
    using namespace std;
    class VerificationFichiers
    {

    public :
    bool VerificationFichiers::EstOkFichier1(ifstream fichier){
    fichier.open(fichier1, ios::in);// On ouvre le fichier en lecture
    if(fichier) return true;
    else
    return false;

    fichier.close();}//EstOkFichier1(ifstream fichier)

    };
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. velderama Messages postés 203 Statut Membre 10
     
    Puis le main

    #include <iostream>
    #include <string>
    #include "VerificationFichiers.h"
    #include <fstream>
    #include <stdlib.h>
    using namespace std;

    int main(int argc, char *argv[])
    {
    VerificationFichiers vf;
    vf.fichier1=argv[1];
    vf.fichier2=argv[2];
    return 0;
    }
    Elle est pas encore finie mais deja elle veut pas de VerificationFichiers.h a la compilation???
    J'ai du mal avec les classes en c++
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      https://cpp.developpez.com/faq/cpp/?page=Les-classes-en-Cplusplus#CLASS_header_cpp

      ici il y a une explication asssez claire de la règle pour inclure les fichiers.

      Il faut que le compilateur connaisse tout pour chaque fichier. Or par exemple dans ton .H tu utilises un "ifstream" (qui est déclaré dans <fstream> il me semble) mais il n'est pas inclus.
      0
      1. velderama Messages postés 203 Statut Membre 10 > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci ca a enlever certains bugs
        tu peux me dire c'est quoi ce bug?
        11 E:\Projet2008\Dev-Cpp\Projet\Main.cpp no match for 'operator=' in 'vf.VerificationFichiers::fichier1 = *(argv + 4u)'
        0
      2. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > velderama Messages postés 203 Statut Membre
         
        vf.VerificationFichiers::fichier1 = *(argv + 4u)

        moi aussi je te répondrait la meme chose que ton compilateur :o) : tu veux dire quoi avec cette ligne de code ?

        fichier1 est un "ifstream" et *(argv + 4u) est euhh.... je ne sais plus trop : une chaine de caractère normalement, mais en tout cas pas un ifstream. donc ton "=" n'a pas de sens pour le compilateur. Il faut créer un ifstream à partir de ton nom de fichier comme char sniper l'a fait plus bas (N°11):
        blabla::fichier1 = ifstream( *(argv + 4u) );
        0
  7. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Houlà...
    ** remarque sur ton .h :
    tu met deux foi le constructeur VerificationFichiers();
    par contre, pour tes fichier1 et fichier2, tu utilise ifstream. Or tu les les utilise plutôt comme des char*
    Comme il a été dit, il manque #include <fstream>
    ** remarque sur ton verif*.cpp
    Les include c'est bien. Par contre, ça ne ser à rien de refaire un "class verificationfichier { ..." puisque la déclaration à déjà été faite dans ce fichier pa l'ajoue de #include "verificationfichiers.h"
    l'ajoue de VerificationFichier:: devant estOkFichier1 est suffisant pour résudre la portée
    ** remarque sur le main
    Tu essai d'affecté un char* à un ifstream dans les deux lignes
    vf.fichier1=argv[1];
    vf.fichier2=argv[2];
    0
    1. velderama Messages postés 203 Statut Membre 10
       
      Oui ca été enlever merci abus surement de copie-coller...
      donc comment resoudre le probleme

      Tu essai d'affecté un char* à un ifstream dans les deux lignes
      vf.fichier1=argv[1];
      vf.fichier2=argv[2];

      Je suis débutant donc je cale beaucoup.Merci quand meme tout le monde
      0
  8. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Je pense qu'il faut revoir ton programme entièrement.
    Je suis malheuresement assez mal à l'aise avec les ifstream.
    Je dirai :
    vf.fichier1=ifstream(argv[1]);
    et
    bool VerificationFichiers::EstOkFichier1(){
    //fichier1.open(ios::in);fichier déjà ouvert
    if(fichier1) return true; // if(!fichier1.fail())
    else
    return false;
    Masource d'info : https://en.cppreference.com/w/
    0
    1. velderama Messages postés 203 Statut Membre 10
       
      vf.fichier1=ifstream(argv[1]); marche pas !?

      Le truc c'est comment recuperer un fichier passer en argument. car le fichier type ifstream et argument type char* !
      Je
      0
  9. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    bon, ba il faut passer par des pointeur :
    class verif...{
    ifstream* fichier1;
    }
    puis :
    vf.fichier1=new ifstream(argv[1]);
    Et on appel fichier1->fail();
    0
    1. velderama Messages postés 203 Statut Membre 10
       
      Ca a l'air detre bon ya plus de bug donc je vais essayer de continuer.
      Par contre j'ai pas compris "Et on appel fichier1->fail();"?
      Merci beaucoup il va falloir que je sache utiliser les pointeurs du moins pour fichier1 et fichier 2 pour la suite?
      0
      1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331 > velderama Messages postés 203 Statut Membre
         
        oui, en effet, il va falloir passer par les pointeurs. à moins que...
        VerificationFichiers.h
        
        #define VERIFICATIONFICHIERS_H
        #ifndef VERIFICATIONFICHIERS_H
        #include <fstream>
        #include <string>
        using namespace std;
        class VerificationFichiers
        {
        public :
        ifstream fichier1; // Fichier1 en lecture
        ifstream fichier2; // Fichier2 en lecture
        string nomF1,nomF2;
        bool EstOkFichierRef(string fichier);//Test si le fichier1 est bon
        bool EstOkFichierOcr(string fichier);//Test si le fichier2 est bon
        //Constructeurs//
        VerificationFichiers();
        VerificationFichiers(string f1,string f2);
        };
        #endif

        VerificationFichiers.cpp

        #include "VerificationFichiers.h"
        #include <iostream>
        #include <string>
        #include <fstream>
        #include <stdlib.h>
        using namespace std;
        bool VerificationFichiers::EstOkFichierRef(string fichier){
             fichier1.open(fichier, ios::in);// On ouvre le fichier en lecture
              if(fichier1) return true;
              else
                 return false;
              fichier1.close();
        }//EstOkFichier1(ifstream fichier)
        
        Et min.cpp
        #include <iostream>
        #include <string>
        #include "VerificationFichiers.h"
        #include <fstream>
        #include <stdlib.h>
        using namespace std;
        
        int main(int argc, char *argv[])
        {
        VerificationFichiers vf;
        vf.nomF1=argv[1];
        vf.nomF2=argv[2];
        vf.EstOkFichierRef(vf.nomF1);
        return 0;
        } 
        0
  10. velderama Messages postés 203 Statut Membre 10
     
    Vous auriez pas un lien pour le cours sur le "map" Merci
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      https://cpp.developpez.com/faq/cpp/?page=La-STL#STL_choix_conteneur

      c'est pas sur les map mais sur les conteneurs de la bibliotheque standard de modèle (STL) en général.

      Pour les map voici un lien aussi, mais je trouve que ça manque un peu d'infos et d'exemples, j'ai pas mieux sous la main :

      http://www.cplusplus.com/reference/map/map/
      0
      1. velderama Messages postés 203 Statut Membre 10 > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci Pacorabanix t'aurai pas un exemple d'utilisation stp.
        Car la j'essaie d'inserer chaque mots de plus de 3 caracteres du fichier et sa postion
        avec key=mot et value = position ?
        Merci
        0
  11. velderama Messages postés 203 Statut Membre 10
     
    J'ai revu mon probleme initial autrement :
    J'ai principalement 3 classes :

    -main qui lit les fichiers en parametre et lance les autres classes

    -classe CreationListe avec des fonctions:
    insererMotLue();//ajoute le mot et sa position
    affichageListe();//affiche le fichier qui contient les mots lus e tleur position!
    ...
    Donc est ce que faire un map c'est utile ici et comment proceder?
    Merci
    0