Afficher le contenu d'un fichier dans un listBox

Signaler
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009
-
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009
-
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

Messages postés
15021
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 avril 2021
94
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...
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

Merci de ta réponse. Tu me conseilles quel contrôle -au lieu d'un listBox- ?
Messages postés
15021
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 avril 2021
94
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...
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

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 :-)
Messages postés
15021
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 avril 2021
94
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...
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

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 ?
Messages postés
15021
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 avril 2021
94
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...
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

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 :-(
Messages postés
15021
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 avril 2021
94
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...
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

Oui, cette erreur je sais qu'il me manque une méthode, mais je ne sais pas laquelle...
Messages postés
15021
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 avril 2021
94
FileOpenDialog.GetPathName();
Non?


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

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

ciao...
BruNews, MVP VC++
Messages postés
15
Date d'inscription
vendredi 28 novembre 2008
Statut
Membre
Dernière intervention
15 octobre 2009

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.