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

  FORUM HardWare.fr
  Programmation
  C++

  probleme d'affichage dans une listbox

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme d'affichage dans une listbox

n°1041171
roromaino
Posté le 09-04-2005 à 13:43:43  profilanswer
 

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

mood
Publicité
Posté le 09-04-2005 à 13:43:43  profilanswer
 

n°1041190
vincent0
Posté le 09-04-2005 à 14:06:01  profilanswer
 

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°1041244
roromaino
Posté le 09-04-2005 à 14:49:33  profilanswer
 

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..........

n°1041338
skelter
Posté le 09-04-2005 à 15:59:50  profilanswer
 

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.

n°1041368
roromaino
Posté le 09-04-2005 à 16:34:47  profilanswer
 

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:

n°1041379
skelter
Posté le 09-04-2005 à 16:43:53  profilanswer
 

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

n°1041380
roromaino
Posté le 09-04-2005 à 16:45:12  profilanswer
 

ok merci skelter

n°1041381
roromaino
Posté le 09-04-2005 à 16:45:30  profilanswer
 

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

n°1041383
Lam's
Profil: bas.
Posté le 09-04-2005 à 16:46:36  profilanswer
 

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...

n°1041404
roromaino
Posté le 09-04-2005 à 17:12:35  profilanswer
 

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 ?
 

mood
Publicité
Posté le 09-04-2005 à 17:12:35  profilanswer
 

n°1041432
skelter
Posté le 09-04-2005 à 17:39:49  profilanswer
 

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

n°1041468
roromaino
Posté le 09-04-2005 à 18:47:33  profilanswer
 

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


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

  probleme d'affichage dans une listbox

 

Sujets relatifs
Problème de conception[EJB]Problème de connexion JDBC
probleme avec EXCELLProbleme avec Collections.sort(List<T> list)
Exécuter une macro Excel sans affichage intermédiairesolution pour probleme d´applet signé mais sans accés disque ou socket
probleme de pointeur[PHP] problème pour echanger des donnees avec un serveur SOAP
problème script connexion easyphp 1.8problème script connexion easyphp 1.8
Plus de sujets relatifs à : probleme d'affichage dans une listbox


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