Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1585 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Problème à l'exécution sous VC++ [Résolu]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème à l'exécution sous VC++ [Résolu]

n°369901
gooopil
pfiew
Posté le 23-04-2003 à 21:41:54  profilanswer
 

Hello
 
J'ai un truc tout bizarre qui m'arrive avec VC++ 6.0, c'est juste chiant, ca m'empeche pas de bosser mais c'est chiant :
Le code suivant compile parfaitement mais, quand je le lance à partir de Vc++ (le zoli point d'exclamation rouge), le code suivant me lance un runtime error. Si je lance l'appli compilé à partir de windows, ca marche nickel.....La je comprend plus :crazy:
 
Bon j'arrive à bosser mais c'est pas très pratique et puis je suis d'un naturel assez curieux alors j'aimerais bien savoir pourquoi et comment y remédier....
 
Merci
 
 
Voila le code incriminé :

Code :
  1. CString line;
  2. int i=0,j=0,eof=0;
  3. long pos=0;
  4. char cmp[2]="";
  5. char buffer[20]="";
  6. CFile fic("data\\genres.txt", CFile::modeRead );
  7. fic.SeekToBegin();
  8. pos=fic.GetPosition();
  9. //Lecture du nb d'enregistrements
  10. fic.Read(cmp,1);
  11. while(cmp[0]!='\n')  //Parcours une ligne
  12. {
  13.  pos=fic.Seek(pos+1,CFile::begin );
  14.  line+=cmp;
  15.  fic.Read(cmp,1);
  16. }
  17. eof=char2int(line.GetBuffer(0));
  18. //Lecture des enregistrements : nb genre\n
  19. pos=fic.Seek(pos+1,CFile::begin );
  20. fic.Read(cmp,1);
  21. while(j<eof)  //Parcours tout le fichier
  22. {
  23.  line="";
  24.  fic.Read(cmp,1);
  25.  while(cmp[0]!='\n')  //Parcours une ligne
  26.  {
  27.   pos=fic.Seek(pos+1,CFile::begin );
  28.   line+=cmp;
  29.   fic.Read(cmp,1);
  30.  }
  31.  i=0;
  32.  while(line[i]!=' ')i++;
  33.  line=line.Right(line.GetLength()-i-1);
  34.  line=line.Left(line.GetLength()-1);
  35.  m_Genres[j] = line;
  36.  j++;
  37.  pos=fic.Seek(pos+1,CFile::begin );
  38. }
  39. fic.Close();


Message édité par gooopil le 24-04-2003 à 13:49:29
mood
Publicité
Posté le 23-04-2003 à 21:41:54  profilanswer
 

n°369911
SquiZZ
Posté le 23-04-2003 à 21:57:40  profilanswer
 

je sais pas trop ce qui peut provoquer ca, mais dans un premier temps essaie de simplifier un peu la routine de lecture de ton fichier.
Tu veux juste lire ton fichier ligne par ligne ?
si oui utilise CArchive :
 

Code :
  1. CFile f;
  2.  // ouvrir le fichier
  3.  if(f.Open("monBeauFichier.txt", CFile::modeRead, NULL))
  4.  {
  5.   CArchive ar(&f, CArchive::load);
  6.   CString data;
  7.   while(ar.ReadString(data))
  8.   {
  9.    // traiter la ligne


Message édité par SquiZZ le 23-04-2003 à 22:01:30
n°369914
gooopil
pfiew
Posté le 23-04-2003 à 22:04:29  profilanswer
 

Pff et tu sais même pas pourquoi ca marche pas ;)
 
Nan je déconne, Merci :) comme je vais pas mettre un post à chaque fois que j'ai une couille, j'avais laissé mon truc un peu foireux mais qui marche. Du coup, je vais pouvoir faire ca proprement :D
 
Ca m'interresse toujours de savoir pourquoi ca marche qu'a moitié.....
 
 
Tiens, Barthez vient de s'en prendre un troisième par Ronaldo :D:D


Message édité par gooopil le 23-04-2003 à 22:04:50
n°369919
SquiZZ
Posté le 23-04-2003 à 22:12:25  profilanswer
 

Code :
  1. i=0;
  2.       // ici je testerais bien la fin de chaine histoire de pas  
  3.       // partir en live si j'ai pas d'espace dans la ligne
  4.       while(line[i]!=' ')i++;
  5.      
  6.       // c'est censé faire quoi ?
  7.       // tu peux donner un exemple d'une ligne de ton fichier
  8.       line=line.Right(line.GetLength()-i-1);
  9.       line=line.Left(line.GetLength()-1);
  10.       // c'est quoi m_genres ?   surement un CString[46] ?
  11.       m_Genres[j] = line;
  12.    
  13.       // on testerais pas si j est supérieur à 45 ?
  14.       j++;


Message édité par SquiZZ le 23-04-2003 à 22:16:34
n°369929
gooopil
pfiew
Posté le 23-04-2003 à 22:25:06  profilanswer
 

- Chaque enregistrement est de la forme  
0 Texte Machin à récupérer
1 Blabla
....
 
- le .right et .left servent à enlever un espace et le \n en trop dans la chaine. Au départ, j'avais prévu de récup juste ce que j'avais besoin mais je sais plus pourquoi j'arrivais pas à me débarrasser de l'espace et du \n
 
-m_Genres est effectivement un tableau, la taille est supérieure aux nombres d'enregistrements du fichier, qui de toutes façons ne grandira pas énormément (c'est la liste des genres ID3 pour les Mp3)
 

n°369947
SquiZZ
Posté le 23-04-2003 à 22:34:34  profilanswer
 

si tu utilises Carchive, ReadString ne met pas \n à la fin de la chaine.
 
pour le "while(line[i]!=' ';)i++; " utilises la méthode Find de la classe CString
 
Si ca plante encore après toutes ces modifs, c'est que ca vient pas de là.


Message édité par SquiZZ le 23-04-2003 à 22:35:04
n°369952
gooopil
pfiew
Posté le 23-04-2003 à 22:37:46  profilanswer
 

SquiZz a écrit :

si tu utilises Carchive, ReadString ne met pas \n à la fin de la chaine.
 
pour le "while(line[i]!=' ';)i++; " utilises la méthode Find de la classe CString
 
Si ca plante encore après toutes ces modifs, c'est que ca vient pas de là.


 
Je vais me mettre a CArchive dès la fin du match :)
 
Par contre, je vois pas l'avantage d'utiliser Find() ds ce cas. En interne, il doit bien faire qq chose ds le genre....
 
Merci du coup de main

n°369964
SquiZZ
Posté le 23-04-2003 à 22:43:51  profilanswer
 

Gooopil a écrit :


 
Par contre, je vois pas l'avantage d'utiliser Find() ds ce cas. En interne, il doit bien faire qq chose ds le genre....
 


 
ouep, mais si les gens de crosoft se sont amusés à faire un méthode c'est pour que tu n'aies pas à faire des while(i!=' ';)i++; à tout bout de champ. En plus c'est un peu plus sécurisé et ca te retourne -1 si le caractère a pas été trouvé. tout ca en une seule instruction, rendez vous compte  :sarcastic:

n°369967
gooopil
pfiew
Posté le 23-04-2003 à 22:44:52  profilanswer
 

SquiZz a écrit :


 
ouep, mais si les gens de crosoft se sont amusés à faire un méthode c'est pour que tu n'aies pas à faire des while(i!=' ';)i++; à tout bout de champ. En plus c'est un peu plus sécurisé et ca te retourne -1 si le caractère a pas été trouvé. tout ca en une seule instruction, rendez vous compte  :sarcastic:


 
:D

n°370345
Konar
Posté le 24-04-2003 à 13:16:30  profilanswer
 

C'est une histoire de working directory : quand tu le lances a la main, bah le working directory est celui ou se trouve l'éxé, mais sous visual quand tu le lances avec CTRL-F5 ou en debug, le working directory par défaut est celui ou se trouve les sources.
 
donc ton fichier "data\\genres.txt" aurait ptet du mal a s'ouvrir si j'ai pas tort. De toute facon t'aurais pu trouver tout seul en lancant une debug.
 
en vc6 me souviens plus, mais sous le 7 ca se change dans les propriétés de ton projet, debugging, Working Directory. Tu mets un $(OutDir) ki correspond a Release, Debug, ou autres et ca devrait marcher.

mood
Publicité
Posté le 24-04-2003 à 13:16:30  profilanswer
 

n°370361
gooopil
pfiew
Posté le 24-04-2003 à 13:38:59  profilanswer
 

Konar a écrit :

C'est une histoire de working directory : quand tu le lances a la main, bah le working directory est celui ou se trouve l'éxé, mais sous visual quand tu le lances avec CTRL-F5 ou en debug, le working directory par défaut est celui ou se trouve les sources.
 
donc ton fichier "data\\genres.txt" aurait ptet du mal a s'ouvrir si j'ai pas tort. De toute facon t'aurais pu trouver tout seul en lancant une debug.
 
en vc6 me souviens plus, mais sous le 7 ca se change dans les propriétés de ton projet, debugging, Working Directory. Tu mets un $(OutDir) ki correspond a Release, Debug, ou autres et ca devrait marcher.


 
Nickel chrome ca marche parfaitement :D
 
Pour ce qu'il est de trouver tout seul, tu surestimes mes capacités à utiliser le debugger ;)
 
Merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Problème à l'exécution sous VC++ [Résolu]

 

Sujets relatifs
Probleme de comm avec une liaison série en C++Probleme avec le Doctype et génération d'un menu JavaScript
probleme avec mon ARCHOS JUKEBOX 15 GOMais où est le problème ?? Sql/Java [RESOLU]
Mega problème pour un trigger update[PHP] Htmlentities-Htmlspecialchars= ?[résolu (problème inexsitant]
Enregistrement des données d'un felxgrid dans access [Résolu !][PHP] Problème d'upload et affichage de variable
Plus de sujets relatifs à : Problème à l'exécution sous VC++ [Résolu]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR