[VC++][MFC] Fichier/Affichage (pour débutants)

Fichier/Affichage (pour débutants) [VC++][MFC] - C++ - Programmation

Marsh Posté le 26-07-2005 à 18:13:01    

Bonjour,  
:heink: comment lire et écrire dans un fichier à partir du dialog box (vc++)?
quelqu'un a une idée?


Message édité par d_imane le 30-07-2005 à 11:40:46
Reply

Marsh Posté le 26-07-2005 à 18:13:01   

Reply

Marsh Posté le 26-07-2005 à 18:33:29    

avec les doigts.

Reply

Marsh Posté le 26-07-2005 à 18:45:51    

je veux récuperer les données d'un fichier txt et les afficher dans Edit Box, c'était ça ma question??

Reply

Marsh Posté le 26-07-2005 à 22:52:01    

tu dois bien avoir un système de CFile, vu que tu sembles être en MFC, recherche de ce côté là

Reply

Marsh Posté le 26-07-2005 à 23:08:37    

     "je veux récuperer les données d'un fichier txt"
y en a plein de solution , voici une :
/**********************************************************/
FILE*fichier = fopen("le nom physique de ton fichier.txt","r" )
/**********************************************************/
maintenant tu peux utiliser fread() pour lire .
 
pour ta deuxieme question , je peux pas te repondre parceque
 
c'est pas trop clair . si tu utilises les MFC , tu peux  
 
trouver de la documentation dans MSDN .
 
A++
 

Reply

Marsh Posté le 26-07-2005 à 23:14:40    

adm1n1s7ra7eur a écrit :

"je veux récuperer les données d'un fichier txt"
y en a plein de solution , voici une :
/**********************************************************/
FILE*fichier = fopen("le nom physique de ton fichier.txt","r" )
/**********************************************************/
maintenant tu peux utiliser fread() pour lire .
 
pour ta deuxieme question , je peux pas te repondre parceque
 
c'est pas trop clair . si tu utilises les MFC , tu peux  
 
trouver de la documentation dans MSDN .
 
A++


 
Non, non et non ...
 
Non seulement, on est dans la catégorie C++ et tu proposes une méthode C, mais en plus, il travaille avec les MFC, qui offrent une solution (elle aussi basée sur des classes) qui sera plus en adéquations avec ses besoins

Reply

Marsh Posté le 26-07-2005 à 23:24:50    

CFile voire CArchive si ton fichier peut etre structuré

Reply

Marsh Posté le 26-07-2005 à 23:31:03    

************************************************************
"Non, non et non ...  
 
Non seulement, on est dans la catégorie C++ et tu proposes une méthode C, mais en plus, il travaille avec les MFC, qui offrent une solution (elle aussi basée sur des classes) qui sera plus en adéquations avec ses besoins"
************************************************************
 1- çe n'est qu'un petit exemple et il est tout a fait correct .
 
 2- en C++ , elle peut utiliser fstream .
 
 3- je n'utilise pas MFC dans ma programmation graphique ,
 
alors j'en sais pas beaucoups .
 
A++

Reply

Marsh Posté le 27-07-2005 à 00:28:16    

j'ai utilisé la fonction

Code :
  1. base::write(float a,float b,float c,float d)
  2. {
  3. int i=0,p=0;
  4. size_t l = 0;
  5. float value,val1,val2;
  6. ifstream Al;
  7. xmin=a;
  8. xmax=b;
  9. ymin=c; 
  10. ymax=d;
  11. Dimbase=dim;
  12.     std::vector<vecteur>vect(dim);
  13. Al.open("fich.txt" );
  14. while (i <(Dimbase*2) ) 
  15.  Al >> value;
  16.  val1=value;
  17.     Al >> value;
  18.  val2=value;
  19.     vect[l].x=val1;
  20.     vect[l].y=val2;
  21.     vect[l].id=compt++;
  22.     l++;
  23.  i=i+2;
  24. }
  25. Al.close();
  26. }


ca marche trés bien, mais je veux afficher les valeur de vect(bas.vect[i].x) dans EditBox, j'ai utiliser la fonction:(ne me moquer pas de moi)

Code :
  1. void CTestDlg::OnBase()
  2. {     
  3.     base bas(3.4,39.6,3.4,39.6);
  4.  for(int i=0;i<dim;i++)
  5.  m_Base ="(bas.vect[i].x) ";
  6.  UpdateData(FALSE);
  7. }


2 problèmes :
1.comment afficher la valeur de base.vect[i].x, sachant qu'il s'agit d'un float.
2.avec La boucle for l'affichage s'effectue dans la meme place j'aurai tjs une seul valeure qui apparait dans EditBox
Vous pouvez m'aidez???

Reply

Marsh Posté le 27-07-2005 à 01:30:30    

tu crées une variable pour ton composant ListBox (dans le Class Wizard) pour
que ca s'affiche à la suite (pas un edit box)!
 
ensuite ds ta clasee CtestDlg  
tu appelles la methodes SetWindowText() te ton composant.

Code :
  1. CString s;
  2. base bas(3.4,39.6,3.4,39.6);
  3. for(int i=0;i<dim;i++)
  4.   m_listBox.SetWindowText(s.Format("bas.vect[%d].x = %f", i, bas.vect[i].x));


 
un truk dans le genre


Message édité par Rits75 le 27-07-2005 à 01:46:57
Reply

Marsh Posté le 27-07-2005 à 01:30:30   

Reply

Marsh Posté le 27-07-2005 à 02:24:41    

j'ai implémenté exactement ta proposition ca générer l'erreur suivante:
error C2039: 'SetWindowTextA' : is not a member of 'CString'

Reply

Marsh Posté le 27-07-2005 à 02:36:53    

je travaille avec le MCF!!......?

Reply

Marsh Posté le 27-07-2005 à 10:04:46    

je sais pas comment tu travailles surtout...:)
 
t'as pas du implementé correctement, car j'ai dit d' apellé la methoded SetWindowText de ton composant ,sous-entendu composant graphique!
Donc c'est normal que SetWindowText n'est pas une methode de CString!
mais plus une methode d'un CListBox!
 
As-tu declaré une variable pour ta CListBox avec le class wizard?
si oui verifie son type, par defaut je crois pas qu'il met le bon type du composant sur visual 6!
 
un peu de msdn ne te ferait pas mal non + ;)


Message édité par Rits75 le 27-07-2005 à 10:05:16
Reply

Marsh Posté le 27-07-2005 à 15:34:04    

CWnd::SetWindowText donc n'importe quel composant dispose de cette méthode. CListBox en fait partie.
 
Par ailleurs SetWindowText ne sert pas à remplir un CListBox. Il faut utiliser CListBox::AddString. Et puis d'abord c'est quoi cette histoire de CListBox? Je croyais que tu utilisais un CEdit? Dans ce cas c'est SetWindowText qu'il te faut. Et n'oublie pas le style 'multiligne'.
 
Bon enfin si tu veux le faire avec une liste box:
 

Code :
  1. CString str;
  2. base bas(3.4,39.6,3.4,39.6);
  3. int nIndex; // n'est pas utilisé
  4. for(int i = 0 ; i < dim ; i++)
  5. {
  6.   str.Format("bas.vect[%d].x = %f", i, bas.vect[i].x);
  7.   nIndex = m_listBox.AddString(str);
  8. }

   


Message édité par slash33 le 27-07-2005 à 15:46:11
Reply

Marsh Posté le 27-07-2005 à 16:04:16    

AddString , au temps pour moi! :)
 

Citation :

un peu de msdn ne te ferait pas mal non + ;)


/me sort ->[] :)


Message édité par Rits75 le 27-07-2005 à 16:04:30
Reply

Marsh Posté le 27-07-2005 à 16:45:26    

ca pu msdn enfin j'y comprend rien j'ai jamais vraimment réussi à m'initier à cette saloperie si vous avez des liens qui donne envi je suis preneur d'ailleur puisque par constat je vois que plein plein de monde l'utilise :/


---------------
http://www.blastmanu.info
Reply

Marsh Posté le 27-07-2005 à 18:25:52    

C'est l'anglais qui te dérange? J'ai rien trouvé de compliqué dans la MSDN... à l'exception de la version CD qui mélange allègrement Java, Visual Basic, Windows, FoxPro, VC, C++, C et j'en passe. Bonjour l'embrouille quand tu ne sais pas exactement ce que tu cherches.  :pt1cable:  
 
Sinon pour se mettre aux MFC, je préfère les bouquins "orientés tutoriel". D'ailleurs c'est à partir de ça que j'ai débuté (de toute façon j'avais pas le choix puisqu'il n'y pas de formation dans la boîte... hormis l'auto-formation  :( )
 
Enfin de temps en temps tu devras faire appel à la WIN32 classique (pas d'équivalent MFC  :whistle: )

Reply

Marsh Posté le 27-07-2005 à 20:54:16    

slash33 a écrit :


...
Sinon pour se mettre aux MFC, je préfère les bouquins "orientés tutoriel". D'ailleurs c'est à partir de ça que j'ai débuté (de toute façon j'avais pas le choix puisqu'il n'y pas de formation dans la boîte... hormis l'auto-formation  :( )
...


 
tu peut m'en citer stp ? ou alors tu as des liens à me conseiller ?
 
A chaque fois que je commence à lire des trucs ca me saoule vite fait donc ca fait que je lis à moitié et à la fin je comprend rien :/


---------------
http://www.blastmanu.info
Reply

Marsh Posté le 28-07-2005 à 09:21:07    

Celui par lequel j'ai débuté: "MFC Programmation Sous Windows 95" - aux éditions Eyrolles.
C'est une traduction de l'oeuvre originale:
"Programming Windows 95 with MFC" de Jeff Prosise aux éditions Microsoft Press.
ISBN : 1-55615-902-1
 
Par contre c'est un bouquin qui date. Il doit en exister de plus récents.
 
Je vais commander "Mastering MFC" un de ses jours... qui n'est pas orienté tutoriel comme tu peux l'imaginer. J'étais tombé sur une sélection des meilleurs livres sur les MFC. Si je la retrouve, je te donne le lien.
 
Pour les MFC, http://www.codeproject.com est probablement la référence. Par contre c'est tout en anglais. Tu trouveras des articles destinés à tous les niveaux de maîtrise.


Message édité par slash33 le 28-07-2005 à 09:27:51
Reply

Marsh Posté le 28-07-2005 à 13:17:35    

ok merci, pour le site qui est en anglais c'est encore mieux puisque je cherche à progresser ;)


---------------
http://www.blastmanu.info
Reply

Marsh Posté le 28-07-2005 à 22:49:47    

est ce qu'il ya possiblité d'afficher dans une ListBox deux elements dans une meme ligne séparees par un espace???

Reply

Marsh Posté le 29-07-2005 à 00:23:42    

voila ce n'est pas ci difficile que ca non

Code :
  1. for(int i=0;i<dim;i++)
  2. for(int j=0;j<2;j++)
  3. str.Format(" id/Data/code= %d apx[%d].id apx[%d].Datapx[%d]",i,i,j);
  4. m_ListeApproximation.AddString(str);
  5. }

Reply

Marsh Posté le 29-07-2005 à 01:21:13    


ça se passera comme un chaine de caractere :)

Reply

Marsh Posté le 29-07-2005 à 09:09:12    

adm1n1s7ra7eur a écrit :

ça se passera comme un chaine de caractere :)


Mais qu'est-ce que tu as bien pu vouloir dire??  :??:
 

d_imane a écrit :

voila ce n'est pas si difficile que ca non?


Il faudrait nous donner le détail de la structure apx. Ca paraît bon.
 
Edit: ha non... ->
str.Format(" id/Data/code= %d apx[%d].id apx[%d].Datapx[%d]",i,i,j);
 
Il y a 4 %d et seulement 3 paramètres. Faute de frappe?
 
Au fait pour faire plus pro, CListCtrl ne t'intéresse pas?


Message édité par slash33 le 29-07-2005 à 09:29:45
Reply

Marsh Posté le 29-07-2005 à 10:54:54    

Citation :


str.Format(" id/Data/code= %d apx[%d].id apx[%d].Datapx[%d]",i,i,j);  
Il y a 4 %d et seulement 3 paramètres. Faute de frappe?  


C plutot le sommeil qui produit ca? :pt1cable:  
apx est une class de la forme:

Code :
  1. class Approximation
  2. {
  3. public:
  4. int id;                      //id du vecteur
  5. int *code;                   //code en binaire
  6. float *Datapx;               //xy
  7. Approximation();
  8. void initialiser(int dimbase,int bitcod);
  9. virtual ~Approximation();
  10. };


Pour l'affichage je crois que le probléme est réglé:

Code :
  1. for(int i=0;i<dim;i++)
  2. { int j=0,p=0;
  3.    
  4. str.Format(" id / Data / code= %d      %f     %f    %d %d %d %d %d %d %d %d",apx[i].id,apx[i].Datapx[j],apx[i].Datapx[j+1],apx[i].code[p],apx[i].code[p+1],apx[i].code[p+2],apx[i].code[p+3],apx[i].code[p+4],apx[i].code[p+5],apx[i].code[p+6],apx[i].code[p+7]);
  5. m_ListeApproximation.AddString(str);
  6. }


Je sais ce n'est pas agréable à lire mais ca résoud comme meme le problème s'il y a une autre proposition you're welcom

Reply

Marsh Posté le 29-07-2005 à 11:07:47    

Oui enfin personnellement j'aurai construit la chaîne en plusieurs fois mais oui ça doit être bon. Par contre c'est vrai que côté lisibilité...  ;)
Heu pourquoi tu as des variables p et j qui restent tout le temps à 0, c'est quoi l'intérêt?
 
Pour revenir à ma proposition; un CListCtrl en mode "Report" ça n'aurait pas fait l'affaire? Pour te faire comprendre de quoi je parle, l'explorateur de fichiers est un CListCtrl en mode "Report".
Par contre, c'est effectivement un peu plus compliqué mais c'est nettement plus sympa.
 
Dernier point: concernant ta classe apx. Est-ce qu'on t'as jamais dit qu'il fallait éviter les membres publics? C'est très risqué d'exposer les membres sauf à justifier ce choix. Par ailleurs, comme tu n'utilises pas de mécanisme requérant une classe, une structure aurait suffit (oui tu peux définir des méthodes et même des constructeurs dans une structure C++ pas C).


Message édité par slash33 le 29-07-2005 à 11:16:51
Reply

Marsh Posté le 29-07-2005 à 11:28:36    

les ostringstream c pas mal non plus ....

Reply

Marsh Posté le 29-07-2005 à 11:31:43    

Oui mais le rapport avec les MFC?

Reply

Marsh Posté le 29-07-2005 à 11:33:32    

oh, execuse j'ai pas copié tt le programme, dans la suite j'incrémente bien sur le j et p;jet p sont de taille differente qui est elle auusi differete de i.
pour le CListCtrl, je vais essayer de l'utiliser mais pas mnt, il faut deja que mon programme marche.
j'ai choisi l'attribut public car je dois acceder à ces membres apres.

Reply

Marsh Posté le 29-07-2005 à 11:39:48    

tu peux utiliser "\t" ds tes chaines de caracteres pour faire une tabulation plutot que de mettre plein d'espace.
 
str.Format(" id / Data / code= %d\t%f\t%f\t%d %d %d %d %d %d...

Reply

Marsh Posté le 29-07-2005 à 11:41:13    

Pour la tabulation j'ai un sérieux doute, est-ce qu'elles vont être correctement interprêtées?? Je m'attend à voir un paté à la place. Je parle de l'affichage dans le CListBox bien sûr.


Message édité par slash33 le 29-07-2005 à 11:42:00
Reply

Marsh Posté le 29-07-2005 à 13:30:35    

Rits75 a écrit :

 
str.Format(" id / Data / code= %d\t%f\t%f\t%d %d %d %d %d %d...


\t me sort un caractére bizart

Reply

Marsh Posté le 29-07-2005 à 13:59:12    

Ouais, je m'y attendais.

Reply

Marsh Posté le 29-07-2005 à 16:23:15    

slash33 a écrit :

Oui mais le rapport avec les MFC?


Le rapport ? ben ostringstream permets de pas se faire chier avec des chaines de formatages de 100 pieds de long [:pingouino] masi bon je vous laisse nager dans votre fourbi pas standard ...

Reply

Marsh Posté le 29-07-2005 à 16:26:13    

Joel F a écrit :

Le rapport ? ben ostringstream permets de pas se faire chier avec des chaines de formatages de 100 pieds de long [:pingouino] masi bon je vous laisse nager dans votre fourbi pas standard ...


ils utilisent des CString, pas des std::string ... *MFC powered* :whistle:

Reply

Marsh Posté le 29-07-2005 à 16:28:28    

Merci theShOcKwAvE, tu m'évites une explication.
 
Sinon techniquement, est-ce que ça vaut le coût de faire du mix MFC/STL?


Message édité par slash33 le 29-07-2005 à 16:29:22
Reply

Marsh Posté le 29-07-2005 à 16:33:56    

Non a part pour se faire chier ... masi deja utiliser CString denotes d'une profonde tendance maso

Reply

Marsh Posté le 29-07-2005 à 16:37:29    

Ben on fait du MFC à fond ou pas du tout non?

Reply

Marsh Posté le 29-07-2005 à 16:39:16    

perso je me debrouille pour separer l'interface 100% MFC du code de production qui lui utilise la STL, BOOST etc ...
Au final, peut de changement d'un coté comme de l'autre

Reply

Marsh Posté le 29-07-2005 à 16:41:06    

On peut utiliser la STL côté données et les MFC pour l'interface. Oui je sais je l'ai déja fait. La question était est-ce judicieux de le faire?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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