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 :

problème de std::out_of_range


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut problème de std::out_of_range
    Bonjour à tous,

    Malgré mes recherches sur google, je n'ai pas réussi à trouver la solution à mon problème.
    Je viens donc vous demander de l'aide concernant le programme que j'ai créé.
    Je tiens à préciser que je suis codeur depuis seulement 1 an donc mon code sera un peu sale...

    Donc en fait mon programme il prend un fichier .txt, va chercher toutes les adresses mails et les mets dans un autre fichier .txt sous le format

    kikou@toto.com
    s0nyk@toto.com
    tata@koko.com

    Cela me permet de l'importer plus facilement dans un fichier excel.

    Cela fonctionne bien sur un petit fichier mais j'ai testé sur un très grand fichier et cela m'a donné l'erreur : Exception non gérée à 0x74c9b727 dans stage_fichier_contacts.exe*: Exception Microsoft C++*: std::out_of_range à l'emplacement mémoire 0x0039f778..

    EDIT : bon apparement ce n'est pas la longueur du fichier, car j'ai testé avec un fichier carrément plus long et ça a fonctionné.
    Le fichier qui pose problème est en fait un "copier coller" d'un fichier PDF, si ça peut aider...


    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
    void lireFichier(){
     
    	ifstream fichier("entreprise.txt");  // on ouvre le fichier en lecture
     
        if(fichier)  // si l'ouverture a réussi
        {       
    		string ligne; //variable ligne de type string qui permettra de stocker la chaine de caractère
    		bool ok=false;
     
    		while (getline(fichier, ligne)) // tant qu'on est pas à la fin du fichier, on lit ligne par ligne.
    		{
    			while(ligne != "") // tant qu'on est pas à la fin de la ligne
    			{
    				string  mot;
    				mot = extraitMot(ligne); // cela met le premier  mot de la ligne dans la variable mot
    				mot = suppressionCaractere(mot); //ici on supprime les caractères inutils tel que ?, !, :, ; etc...
    				if (estUneAdresseEmail(mot))
    				{
    					string const nomFichier("adresseEntreprise.txt");
    					ofstream monFlux(nomFichier.c_str(), ios::app);
    					if(monFlux)
    					{
    						monFlux << mot <<  endl;
    					}
    					else
    					{
    						cout << "ERREUR: Impossible d'ouvrir le fichier." << endl;
    					}
    				}
    			}
    		}
            fichier.close();  // on ferme le fichier
    	}
        else  // sinon on met un message d'erreur
    	    cout << "Impossible d'ouvrir le fichier !" << endl;
     
    }

    J'espère que quelqu'un pourra m'aider, je vous remercie d'avance.
    N'hésitez pas à me poser des questions si je n'ai pas été assez clair.

  2. #2
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 35
    Par défaut
    J'ai déjà eu l'exception "out_of_range" en essayant d'accéder à un élément de std::vector qui n'existait pas (par exemple, myvector.at(15) alors qu'il y a 10 éléments dans myvector). Si tu utilises des std::vector, vérifie tous les accès que tu y fais.

    Je ne sais pas s'il y a d'autres classes qui utilisent cette exception.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Par défaut
    euh je n'utilise pas de std::vector hélas

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 35
    Par défaut
    Etant donné qu'il s'agit d'une exception, tu peux essayer de la localiser en utilisant try{} catch{}. J'ai lu sur google que cette exception pouvait être levée par les ofstream et ifstream. Une fois localisée, ce sera plus facile de t'aider. Tu trouveras peut-être même le problème par toi-même

  5. #5
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    peut être plus simple pour lire le fichier :

    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
     
    void lireFichier( const char* inputFilename, const char* outputFilename)
    {
      ifstream inputFile( inputFilename );
     
      string mot;
      while( inputFile>> mot )
      {
        mot = suppressionCaractere( mot );
        if ( estUneAdresseEmail( mot ) )
        {
          ofstream monFlux( outputFilename, ios_base::app );
          if ( !( monFlux << mot ) )
            cout << "ERREUR: Impossible d'écrire le mot ["
              << mot << "] dans le fichier [" << outputFilename << "]"
              << endl;
        }
      }
    }
    et pour le out of range, peut être vous devriez regardez dans les fonctions
    suppressionCaractere, estUneAdresseEmail et extraitMot

    la classe string pourrait faire un out of range (sur substring ou at par exemple

    PS : Je n'ai pas compilé mon code.

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

Discussions similaires

  1. Problème avec std::multiplies
    Par Bakura dans le forum SL & STL
    Réponses: 8
    Dernier message: 25/05/2007, 19h07
  2. problème avec std::cin
    Par _LVEB_ dans le forum SL & STL
    Réponses: 4
    Dernier message: 20/02/2007, 00h35
  3. Problème avec std::vector
    Par dhoorens dans le forum SL & STL
    Réponses: 4
    Dernier message: 31/12/2006, 14h27
  4. Problème de std
    Par Sachiel31 dans le forum MFC
    Réponses: 11
    Dernier message: 06/07/2006, 09h10
  5. Problème avec std::Vector
    Par mister3957 dans le forum SL & STL
    Réponses: 8
    Dernier message: 16/02/2006, 10h18

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