Bonjour,
j'essaie de faire un programme qui va identifier des motifs (paterns) répétitifs dans une chaine de texte de 3000 caractères ou plus.
Les contraintes:
- Les motifs ont une longueur pré-déterminée par l'utilisateur, ex: 7 caractères.
- La chaine de caractères se retrouve dans un fichier externe au programme.
- Lorsque le programme identifie une combinaison de n caractères, celui-ci cherche des motifs identiques. À chaque fois qu'il en trouve un nouveau, il en tient compte dans la fréquence d'apparition du mot (si on voit 2 fois le mot, la fréquence est 2).
- Dans un second fichier externe, le programme va transférer les n (le n est déterminé préalablement par l'utilisateur) motifs les plus fréquents ainsi que la fréquence d'apparition dans l'ordre décroissant.
-Après 3000 caractères le programme cesse de chercher des motifs
--------------------------------------------------------------------------
1)J'aimerais savoir comment lire seulement les n premiers caractères du fichier texte.
2)Pourquoi le test d'ouverture du fichier de sortie ne peut pas afficher de message d'erreur lorsque que je fais une erreur dans l'entrée du nom du fichier? (Pourtant le test pour le fichier d'entrée fonctionne...)
Voici ce que j'ai fait:
Code:#include <iostream> #include <string> #include <fstream> // Utile pour la manipulation de fichiers. #include <cstdlib> // Permet d'utiliser la fonction c_str(). using namespace std; int main() { /*************************************************** * * * Entrees du programme * * * ***************************************************/ // Declaration des constantes const int Nb_Maximal_Caracteres_Consideres = 3000; // Nombre maximal de caracteres dans la chaine de // texte a verifier lors de la recherche de motifs. // Declaration des variables string Nom_Du_Fichier_Entree, // Nom du fichier d'ou provient la chaine de caracteres. Nom_Du_Fichier_Sortie; // Nom du fichier ou sera transfere les motifs et frequences des motifs. int Longueur_Des_Motifs_Recherches, // Longueur des motifs recherches dans la chaine de caracteres. Frequence_Minimale_Apparition, // Frequence minimale d'apparition d'un motif dans la chaine de caracteres. Nb_Maximal_Motifs_Frequents; // Nombre maximal de motifs les plus frequents a afficher dans le fichier de sortie. ifstream ins; // ins est un flux de donnees d'entree. ofstream outs; // outs est un flux de donnees de sortie. /*************************************************** * * * Lecture des entrees * * * ***************************************************/ cout<<"De quel fichier sera extraite la chaine de caracteres a analyser?: "<<endl<<endl; cin>>Nom_Du_Fichier_Entree; ins.open( Nom_Du_Fichier_Entree.c_str() ); // Associe Nom_Du_Fichier_Entree avec le stream ins. // La fonction convertit la chaine de caracteres dans Nom_Du_Fichier_Entree // en une chaine C. // Cas d'erreur lors de l'ouverture du fichier d'entree. if (ins.fail() ) { cerr<< "*** ERREUR: Impossible d'ouvrir le fichier " << Nom_Du_Fichier_Entree << " pour l'extraction de donnees." << endl; return EXIT_FAILURE; // Retour de l'erreur dans l'ouverture dans le fichier. } cout<<endl<<"Dans quel fichier les motifs et leur frequence seront-il transferes?: "<<endl<<endl; cin>>Nom_Du_Fichier_Sortie; outs.open( Nom_Du_Fichier_Sortie.c_str() ); // Associe Nom_Du_Fichier_Sortie avec le stream outs. // La fonction convertit la chaine de caracteres dans Nom_Du_Fichier_Sortie // en une chaine C. // Cas d'erreur lors de l'ouverture du fichier de sortie. /* ERREUR: CE SEGMENT DE CODE N'AFFICHE PAS LE CODE D'ERREUR! if (outs.fail()) { cerr<< "*** ERREUR: Impossible d'ouvrir le fichier " << Nom_Du_Fichier_Sortie << " pour l'insertion de donnees." << endl; return EXIT_FAILURE; // Retour de l'erreur dans l'ouverture dans le fichier. } */ cout<<"Quelle est la longueur des motifs recherches?: "<<endl<<endl; cin>>Longueur_Des_Motifs_Recherches; cout<<"A partir de quelle frequence un motif sera-t-il considere?: "<<endl<<endl; cin>>Frequence_Minimale_Apparition; cout<<"Combien de motifs les plus frequents seront transferes dans le fichier sortie?: "<<endl<<endl; cin>>Nb_Maximal_Motifs_Frequents; return 0; }
-----