Afficher le contenu d'un fichier dans un listBox

khaoula85 Messages postés 15 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 15 octobre 2009 - 14 oct. 2009 à 10:22
khaoula85 Messages postés 15 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 15 octobre 2009 - 15 oct. 2009 à 09:32
Bonjour,
Je veux créer une interface graphique (MFC) qui, à l'aide d'un bouton, parcourt les fichiers .txt, affiche le chemin du fichier sélectionné dans un Edit et affiche le contenu du fichier dans un listBox. J'ai réussi à parcourir les fichiers et à afficher le chemin dans mon contrôle Edit, sauf que j'ai un problème lors de l'affichage du contenu de mon fichier dans le listBox.
Voici mon code :
void CInterfaceDlg::OnBnClickedParcourir()
{
// TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
CString OpenFilter;
OpenFilter = "Text File (*.txt)|*.txt||";

CFileDialog FileOpenDialog(
      TRUE,
      NULL,
      NULL,
      OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,
      OpenFilter,                       // filter
      AfxGetMainWnd());               // the parent window 
  if(FileOpenDialog.DoModal()==IDOK)
{
// ouverture de fichier
CFile File;
VERIFY(File.Open(FileOpenDialog.GetPathName(),CFile::modeRead));
m_csInputFile=FileOpenDialog.GetPathName();
UpdateData(false);

CFile Fichier; 
File.Open(FileOpenDialog., CFile::modeRead); //ouvre en lecture 
        int taille = File.SeekToEnd(); // stocke la taille du fichier dans un entier pour déterminer la taille du tampon. 
        char *Tampon = new char[taille]; //Création dynamique du tampon
        UINT nBytesRead = Fichier.Read(Tampon, taille);
       
        SetDlgItemText(IDC_LIST2,Tampon); //Affiche le contenu de Tampon dans IDC_LIST2 

    }
}


Quelqu'un pour m'aider s'il vous plait ?
Merci !

13 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
14 oct. 2009 à 11:41
Bonjour,
Je ne pense pas qu'une listbox soit bien adaptée dans ton cas. Ce composant permet de représenter des éléments sous forme de listes. Pour remplir une liste, il faut y aller élément par élément...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
khaoula85 Messages postés 15 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 15 octobre 2009
14 oct. 2009 à 13:03
Merci de ta réponse. Tu me conseilles quel contrôle -au lieu d'un listBox- ?
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
14 oct. 2009 à 13:36
Un EditBox me semble plus approprié.
Quel est l'objectif au fait?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
khaoula85 Messages postés 15 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 15 octobre 2009
14 oct. 2009 à 13:41
Voici une maquette "primitive" de ce que je veux faire :
http://cjoint.com/data/konOxkqvHX_MFC.JPG

je veux récupérer le contenu du fichier .txt dans le contrôle (listBox ou editBox) nommé "Values".

Merci :-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
14 oct. 2009 à 13:54
ok, je vois...mais c'est pour faire quoi ensuite?
Si c'est juste pour visualiser le contenu d'un fichier, un EditBox suffit
Si c'est un fichier avec du formattage (gras, couleur,..), il faut un RichTextBox
Si tu veux pouvoir sélectionner une ligne particulière, la listbox peut être utilisé mais il faudra remplir un par un les éléments

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
khaoula85 Messages postés 15 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 15 octobre 2009
14 oct. 2009 à 14:03
Ah d'accord, je comprends mieux ta question... Sur les données (numériques pour le moment) contenues dans le fichier, je veux appliquer des méthodes de perturbation (mathématiques) : calculer la variance/covariance, le transposé des matrices, ajouter des bruits... Les données seront -comme je l'ai mentionné plus haut- numériques, peut-être que je serai obligée après de changer le type .txt en .csv

P.S. J'ai regardé dans ma boite à outils de VS, l'EditBox dont tu parles c'est EditControl ?
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
14 oct. 2009 à 14:08
Euh oui, pardon, en MFC c'est EditControl (et CEdit dans le code je crois)


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
khaoula85 Messages postés 15 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 15 octobre 2009
14 oct. 2009 à 16:17
Voilà, j'ai remplacé le listBox par un EditControl et ai modifié un peu le code pour avoir :
CFile File; 
File.Open(FileOpenDialog., CFile::modeRead); //ouvre en lecture 
        int taille = File.SeekToEnd(); // stocke la taille du fichier dans un entier pour déterminer la taille du tampon. 
        char *Tampon = new char[taille]; //Création dynamique du tampon
        UINT nBytesRead = File.Read(Tampon, taille);
       
        SetDlgItemText(IDC_EDIT2,Tampon); //Affiche le contenu de Tampon dans IDC_EDIT2 


Le compilo n'est pas content et il me fait sortir des erreurs...
- error C2039: 'File' : n'est pas membre de 'CFileDialog'
- error C2039: 'SeekToEnd' : n'est pas membre de 'CFileDialog'
- error C2664: 'CWnd::SetDlgItemTextW' : impossible de convertir le paramètre 2 de 'char *' en 'LPCTSTR'

Je ne sais pas comment les corriger, j'ai bon essayé pourtant :-(
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
14 oct. 2009 à 16:24
FileOpenDialog.,

Il manque quelque chose après ton point?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
khaoula85 Messages postés 15 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 15 octobre 2009
14 oct. 2009 à 16:36
Oui, cette erreur je sais qu'il me manque une méthode, mais je ne sais pas laquelle...
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
14 oct. 2009 à 16:47
FileOpenDialog.GetPathName();
Non?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 oct. 2009 à 19:42
Voila en API, adapter pour MFC.

TXT VERS LISTBOX (WIN32)
http://www.cppfrance.com/code.aspx?id=25258

ciao...
BruNews, MVP VC++
0
khaoula85 Messages postés 15 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 15 octobre 2009
15 oct. 2009 à 09:32
Bonjour,

Buno : Je me suis servie de GetPathName pour récupérer le chemin du fichier dans mon code, ce que je cherchais, c'était récupérer le contenu du fichier.
BruNews : Merci pour le lien.
Au fait, j'ai résolu mon problème, le contenu du fichier s'affiche dans une listBox, il me reste le formatage du fichier (comment récupérer les données dans un tableau ou bien disposer les lignes séparément.
Je mets le code au cas où quelqu'un en aurait besoin :-)
void CInterfaceDlg::OnBnClickedBrowse()
{

 // TODO : ajoutez ici le code de votre gestionnaire de notification de contrôle
 CString OpenFilter;
 OpenFilter = "CSV File (*.csv)|*.csv||";

 CFileDialog FileOpenDialog(
      TRUE,
      NULL,
      NULL,
      OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,
      OpenFilter,                       // filter
      AfxGetMainWnd());               // the parent window 
   if(FileOpenDialog.DoModal()==IDOK)
  {
   // ouverture de fichier
   m_csInputFile=FileOpenDialog.GetPathName();
   
   LoadInputDocument(m_csInputFile);
   
   UpdateData(false);
   }
}


//méthode qui lit le fichier et affiche son contenu
bool CInterfaceDlg::LoadInputDocument(CString i_csFileName)
{
bool l_bResult=false;
CStdioFile File;
l_bResult = File.Open(i_csFileName,CFile::modeRead | CFile::typeText);
 
if (l_bResult)
{
CString l_csReadTmp = L"";
bool l_bRead=File.ReadString(l_csReadTmp);
while (l_bRead)
{
// on va afficher notre contenu
m_ListValues.AddString(l_csReadTmp);
//afficher les lignes lues
l_bRead=File.ReadString(l_csReadTmp);
}
File.Close();
}
 
return l_bResult;
}


Bonne journée !
K.
0
Rejoignez-nous