Récupérer un texte écrit dans un édit control

Résolu
insta_ev - 17 juil. 2015 à 10:28
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 22 juil. 2015 à 21:38
Bonjour,

j'essai de récupérer mon texte saisi dans ma zone de texte mais il ne m'affiche juste la 1ère caractère auriez une idée de comment le résoudre svp



CString Comment;
m_record[m_recordNum][i] = m_tempFilter[i].GetFilteredValue();
//je sauvegarde le texte dans Comment pour l'enregistrement dans comment string
//puis j'efface le texte de la boite texte
//je sauvegarde le comment string qui a ete enregsitre quand j'ai cliqué
CEdit* m_commentaire = (CEdit*)GetDlgItem(IDC_COMMENT);
/*CEdit* m_commentaire = (CEdit*)GetDlgItemText(IDC_COMMENT, Comment);*/
m_commentaire->GetWindowText(Comment);
////Conversion de CString en string :
CStringA Valeurtransformeeauformat(Comment);
Comment_string = Valeurtransformeeauformat.GetBuffer();
/*m_comment->SetWindowTextW(LPCTSTR(" "));*/
m2_record[m_recordNum][i] = Comment_string.c_str();
//je n'ai plus besoin du comment string
Comment_string = "";

// et j'affiche et j'ecris
sprintf_s(buffer, "%s", m2_record[i][0]);

fwrite(buffer, 1, strlen(buffer), hFile);

4 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
17 juil. 2015 à 11:00
Bonjour.

Très bizarre ce mélange C et C++... Pourquoi utiliser du fwrite, sprintf, etc... alors que tu as les std::string, les std::ostringstream, std::ofstream, etc... ? J'aurais mis directement:

std::ofstream file("nom_fichier");
file << m2_record[i][0];


Quel est le type de m2_record ? Sans en connaître le type, j'ai l'impression que tu affiches le premier caractère de la chaine m2_record[i]. Je mettrais peut être "sprintf_s(buffer, "%s", m2_record[i]);" (encore une fois, sans connaître le type, ce n'est qu'une supposition).

Compiles-tu en activant les warnings ?

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
bonjour,

j'ai déclarer dans mon .h m2_record
CString m2_record[MAX_RECORD][1];
je n'ai pas activé les warnings, je pensais qu'ils n'avaient pas un grand effet
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 17/07/2015 à 12:19
Il faut *toujours* afficher les warnings ! Ce n'est pas parce que tu les masques qu'ils n'existent plus. Travailler sans l'affichage des warnings, c'est travailler sans aide...

Je ne connaît pas les CString (ce n'est pas du C++, mais une classe propre au framework que tu utilises), donc difficile de dire ce que ferait l'affichage d'un CString dans un buffer.

Dans ce cas, il te faut afficher sur la console (s'il y en a une) ou dans un fichier, la valeur à chaque étape, pour trouver à quel moment tu perds ton information.

  std::ofstream file("test.txt");
  std::ostream& out = std::cout; // Si console, mettre ceci.
  // std::ostream& out = file; // Si pas de console, mettre ceci à la place.


  CString Comment;
  m_record[m_recordNum][i] = m_tempFilter[i].GetFilteredValue();
  CEdit* m_commentaire = (CEdit*)GetDlgItem(IDC_COMMENT);
  m_commentaire->GetWindowText(Comment);
  CStringA Valeurtransformeeauformat(Comment);
  Comment_string = Valeurtransformeeauformat.GetBuffer();
  out << Comment_string << "\n";
  out << Comment_string.c_str() << "\n";
  m2_record[m_recordNum][i] = Comment_string.c_str();
  out << m2_record[m_recordNum][i] << "\n";
  out << m2_record[m_recordNum][0] << "\n";


Attention, je te donne une méthode en C++ pur, je ne sais pas si ça sera compatible avec le framework que tu utilises.

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
22 juil. 2015 à 21:38
Salut,

avec MFC, pour les fichiers on utilise la classe CFile

Cstring sTexteAEcrire(_T("test"));
CFile fic;
fic.Open(_T("test.txt"), CFile::modeCreate | CFile::modeWrite);
fic.Write( sTexteAEcrire,  sTexteAEcrire.GetLength());
fic.Close();


Pour récupérer ta chaine, tu peux faire ceci

CString sTmp( Comment_string.c_str() )
m2_record[m_recordNum][i] = sTmp;


ou bien lstrcpy

ltrcpy(m2_record[m_recordNum][i], Comment_string.GetBuffer())
Comment_string.ReleaseBuffer();


bye...
0
Rejoignez-nous