probleme d'affichage dans une listbox

probleme d'affichage dans une listbox - C++ - Programmation

Marsh Posté le 09-04-2005 à 13:43:43    

bonjour,
 
Je suis sous windows Xp pro Sp2 et je suis sous borland.
 
J'ai un probleme d'affichage dans une liste box.
Je veux recuperer une liste de mot dans un fichier texte et ensuite les afficher dans une listbox.
 
La liste de mot est de type:
jule
marc
paul
 
ect...
 
Lors de l'affichage dans la list box, le retour charriot est interpreter commme un caractere(sorte de rectangle noir).
 
 
Voici mon code:

Code :
  1. //ouvrir le fichier texte contenant la base de données
  2.         lecture = fopen(FICHIER_BASE_DE_DONNEES,"r" );
  3.         //tester si le fichier est bien present
  4.         if(!lecture)
  5.         {
  6.                 ShowMessage("fichier base de donnée introuvable" );
  7.         }
  8.         else
  9.         {
  10.                 while( (!feof(lecture)))
  11.         {
  12.          fgets(lectureMotcle,LG_CHAINE,lecture);
  13.                         Lb_motcle->Items->Add(lectureMotcle);
  14.                 }
  15.                 fclose(lecture);
  16. }


 
une idée ?
 
merci d'avance

Reply

Marsh Posté le 09-04-2005 à 13:43:43   

Reply

Marsh Posté le 09-04-2005 à 14:06:01    

dans ton fichier texte tu as ceci:
jule\r\nmarc\r\npaul..
 
La fonction fgets lis tout jusqu'au moment qu'il trouve un \n.
Donc le petit carré que tu vois, c'est le \r.
 
Solution:
1)Soit tu change ton fichier pour avoir: jule\nmarc (pas facil avec windows)
2)Tu supprime le dernier caractère de lectureMotcle
 

Reply

Marsh Posté le 09-04-2005 à 14:49:33    

ok je te remercie, je vais plustot partir vers la suppression du dernier caractere mais je bloque.
 
mon code:
strcpy(lectureMotcle,lectureMotcle-2);
 
ca ne marcha pas du tout comprend pas, je cherche..........

Reply

Marsh Posté le 09-04-2005 à 15:59:50    

vincent0 a écrit :

dans ton fichier texte tu as ceci:
jule\r\nmarc\r\npaul..
 
La fonction fgets lis tout jusqu'au moment qu'il trouve un \n.
Donc le petit carré que tu vois, c'est le \r.
 
Solution:
1)Soit tu change ton fichier pour avoir: jule\nmarc (pas facil avec windows)
2)Tu supprime le dernier caractère de lectureMotcle


 
n'importe quoi, ca sert à quoi l'ouverture en mode texte pour les E/S standard ? parce que la représentation binaire d'un fichier texte dépend du système
sous windows c'est \r\n mais en C c'est \n, donc en binaire tu auras \r\n mais en mode texte \n, seulement la listbox de l'api windows attend \r\n donc la solution c'est d'etre cohérent et d'utiliser l'api windows pour lire le fichier.

Reply

Marsh Posté le 09-04-2005 à 16:34:47    

ha ok, donc faut que j'ouvre le fichier et que je le lise avec les api windows, j'ai trouvé ca :
 
BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD NumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped)
 
HFILE OpenFile(
 
    LPCSTR lpFileName, // pointer to filename  
    LPOFSTRUCT lpReOpenBuff, // pointer to buffer for file information  
    UINT uStyle // action and attributes  
   );
 
 :bounce:  :bounce:

Reply

Marsh Posté le 09-04-2005 à 16:43:53    

pour etre coherent oui, si tu ouvre ton fichier en binaire avec la stdio ca marchera egalement

Reply

Marsh Posté le 09-04-2005 à 16:45:12    

ok merci skelter

Reply

Marsh Posté le 09-04-2005 à 16:45:30    

:hello:  :hello:  :bounce:  :bounce:  :hello:  :hello:

Reply

Marsh Posté le 09-04-2005 à 16:46:36    

A mon humble avis, la class CListBox n'attend pas de retour chariot du tout à la fin de de ses chaînes de caractères.  
Mais je peux me tromper...

Reply

Marsh Posté le 09-04-2005 à 17:12:35    

oui tout a fait, d'ailleur mon probleme est pas reglé et quand je veux ajouter un item et le sauvegarder dans un fichier c'est la meme chose, forcement car je suis oblifé aller a la ligne sinon ca fait une seule ligne contenant tout les mots a la suite.
 
comment virer ce satané de retour chariot venant du fichier pour afficher dans la listbox que le mot ?
 

Reply

Marsh Posté le 09-04-2005 à 17:12:35   

Reply

Marsh Posté le 09-04-2005 à 17:39:49    

strrchr renvoi un pointeur sur la derniere occurence d'un caractere, donc en binaire ou avec l'api windows mets '\0' à la place du \r en fin de ligne
 
ou
 

Code :
  1. while( fgets(lectureMotcle,sizeof lectureMotcle, lecture) )
  2. {
  3.      char *p;
  4.      if( (p = strrchr(lectureMotcle,'\n')) )
  5.          *p = '\0';
  6.      Lb_motcle->Items->Add(lectureMotcle);
  7. }


 
j'avais pas vu que tu faisais du c++, ya std::ifstream, lit un std::string avec std::getline

Reply

Marsh Posté le 09-04-2005 à 18:47:33    

ro ba merci skerlter ca marche, c'est exactement ce que je voulais , je cherchais de mon coté avec strchr mais en effet ton code est correct.
 
merci l'ami

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed