begin process at 2012 05 29 06:43:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Exception anormale lors d'un substr C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Exception anormale lors d'un substr C++

dimanche 27 mars 2011 à 19:36:13 | Exception anormale lors d'un substr C++

LeaIUT

Bonsoir,

lors de l'execution de mon programme, une exception me stoppe la progression:
"terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr"

je voudrais savoir comment affecter chaque mot d'une chaine à une variable.
J'ai une fonction qui ouvre un fichier, le lit (ligne par ligne) et qui doit ensuite découper chaque ligne en mot, et affecter ces mots à une variable.
Le type "Evenement" est un enregistrement avec jour (int), heureDebut et heureFin (float) et abrege et description (string). La fonction doit ouvrir un fichier texte rédigé comme tel :
5 11 12 ARC Architecture_Rattrapage
3 17 18.5 CPT Comptabilite_Rattrapage

Je voudrais donc par exemple que 5 soit affecté à evenement.jour, 11 soit affecté à evenement.heureDebut etc...

Donc pour cela j'ai cette procédure,
Code C/C++ :
void lireFichierEvenements( Agenda &a) throw (string)
{
	ifstream f;
	f.open("test.txt");
	string ch;
	Evenement e;

	if(f)
	{
		while (!f.eof())
		{
			string ligne;
			getline(f, ligne);
			e.jour = convertInt(ligne.substr(0, 1));
			e.heureDebut = convertFloat(ligne.substr(2, 2));
			e.heureFin = convertFloat(ligne.substr(5, 2));
			e.abrege = ligne.substr(8, 3);
			e.description = ligne.substr(12);
			afficherEvenement(e);
		}
	}
	else
    {
        cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
    }
    f.close();
}


ps: je teste la procédure sur un fichier ne contenant qu'une seule ligne pour le moment.

Le fichier texte est le suivant:

5 11 12 ARC Architecture_Rattrapage


Au resultat, le code nous affiche le résultat prévu (donc pas de problème jusque là) mais il y a quand même cette exception qui se lève.
Je ne comprends pas pourquoi, vu que je ne retire pas plus de caractères que ce que la chaine en contient.

Merci de votre aide =)
lundi 28 mars 2011 à 10:37:43 | Re : Exception anormale lors d'un substr C++

CptPingu

Administrateur CodeS-SourceS
- Évite les "using namespace", voir: [ Lien ]
- Évite aussi les "throw" c'est rarement utile, souvent gênant.

L'erreur veut dire que tu sors des bornes de ta chaîne.
Ex qui provoque l'erreur:
Code C/C++ :
#include <string>

int main()
{
  std::string s = "coucou"; // Taille de 6
  s.substr(10); // Lève une exception

  return 0;
}


Donc avant de faire un substr(2,2) ou substr(5,2), regade déjà si "ligne" contient bien une chaine et si celle-ci a la bonne taille.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 28 mars 2011 à 10:46:43 | Re : Exception anormale lors d'un substr C++

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
J'allais oublier, si la forme de ton fichier est toujours la même, alors il y a bien plus simple:
Code C/C++ :
		while (f)
		{
                   f >> e.jour >> e.heureDebut >> e.heureFin >> e.abrege >> e.description;
		   afficherEvenement(e);
		}


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
mardi 29 mars 2011 à 11:29:49 | Re : Exception anormale lors d'un substr C++

LeaIUT

Parfait!
Je te remercie énormément, c'est exactement ça
Et merci encore pour tes explications bien détaillées



Cette discussion est classée dans : fichier, ligne, string, exception, substr


Répondre à ce message

Sujets en rapport avec ce message

les class [ par snpier wolf ] bonjour voila j'ais commancer un peux a programmé avec les class.et j'ais un problème que je n'arrive pas à résoudre.voila le bou de codeclass command c++ urgence svp [ par yanlou ] maximus salut,j'ai u fichier txt qui contient des chaine de caracté, exemple :RFRPAD7RFRPAD8/A8 HELP - - getline string char conversion de types?? [ par gregroar ] //je teste dans une console la fonction getline, que je trouve suffisament rapide. //cependant je me retrouve confronté à des problemes de conversion Problème d'affichage a la lecture d'un fichier avec fonction fstream et stockage dans une chaine [ par curite ] Bonjours, j'ai créer un gestionnaire de mot de passe en c++ je vous montre le code sinon vous allez rien comprendre :p main.cpp [code=cpp] #include Comparaison de string ligne par ligne pour supprimer les doublons [ par Flash11 ] Bonjour, je suis nouveau et débutant dans les langages de programmation. J'espère que vous pourrez m'aider à résoudre mon problème et je remercie d'a Lecture ligne par ligne de fichier txt en C++pour re-jeu de données Temps Reel [ par DamienR83 ] Bonjour, Je souhaite faire une API en C++ avec un affichage de données en "pseudo temps-réel". L'ensemble des mes données sont déjà enregistrées par problème listBox [ par ezzineahmed ] salut, j'utilise visuel 2008, j'ai fait un bouton qui fait le calcul et il enregistre le resultat dans un fichier, je veut ouvrir et ecrire le contenu lire chaîne ligne par ligne [ par mervat ] bonjour, je veux lire une chaîne (std::string) ligne par ligne, j'ai pas pu le faire avec std::getline car ça marche avec les fichiers (std::ifstream) Enregistrer un type string dans un fichier [ par jeromenaze ] Bonjour, J'ai un problème j'ai rechercher un peut partout mais je suis débutant en programmation donc j'aimerai des explication. Voila je veut enregis POLA principe en C [ par erkan1404 ] Bonjour, J'effectue un petit programme qui réalise une implémentation du principe POLA pour ce qui concerne les accès à des fichiers. Par défaut, un


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales