C++ classe fichiers Pour 1 semaine
Résolu
velderama
Messages postés
199
Date d'inscription
Statut
Membre
Dernière intervention
-
velderama Messages postés 199 Date d'inscription Statut Membre Dernière intervention -
velderama Messages postés 199 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- C++ classe fichiers Pour 1 semaine
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Explorateur de fichiers - Guide
- Fichiers bin - Guide
10 réponses
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.
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.
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
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
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)
};
#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)
};
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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++
#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++
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.
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.
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) );
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) );
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];
** 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];
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/
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/
bon, ba il faut passer par des pointeur :
class verif...{
ifstream* fichier1;
}
puis :
vf.fichier1=new ifstream(argv[1]);
Et on appel fichier1->fail();
class verif...{
ifstream* fichier1;
}
puis :
vf.fichier1=new ifstream(argv[1]);
Et on appel fichier1->fail();
oui, en effet, il va falloir passer par les pointeurs. à moins que...
VerificationFichiers.h
VerificationFichiers.cpp
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; }
Vous auriez pas un lien pour le cours sur le "map" Merci
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/
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/
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
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
J'ai essayé mais c'est vraiment different du java que je connais mieux.