begin process at 2012 05 29 21:47:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Problème de récupération des lignes d'un Edit Multiline


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de récupération des lignes d'un Edit Multiline

mardi 16 novembre 2004 à 01:46:21 | Problème de récupération des lignes d'un Edit Multiline

LaPatoshe

Bonjour, j'ai un petit problème car je ne parviens pas à récupérer de façon intacte chacune des lignes rentrées dans un controle Edit en Multiline.

Voici ma partie de code :
HWND EditTexte;
.............
long LigneCourante = 0; //Compteur de position courante
long MaxLine =0; //Nb de ligne de mon edit box
LPSTR SLigne = (LPSTR) malloc (100); // Chaine chargée de
contenir le numéro de la ligne pour inscription dans un
fichier.
long Taille = 0; //Taille de la ligne courante
TCHAR BufferLigne [1000]; //C'est le buffer qui va contenir
chaque ligne lue


MaxLine = SendMessage(FREInstructionTexte,
EM_GETLINECOUNT, 0, 0);

for (Ligne = 0; Ligne < MaxLine; Ligne ++)
{
Taille = SendMessage(FREInstructionTexte,
EM_LINELENGTH, (WPARAM) Ligne, 0);

SendMessage(FREInstructionTexte, EM_GETLINE,
(WPARAM) Ligne, (LPARAM) BufferLigne);

BufferLigne[Taille+1] = '\0';
ltoa(Ligne,SLigne, 10);
WritePrivateProfileString("INSTRUCTION", SLigne,
BufferLigne, "Fichier.txt");
}


Dans cet exemple, logiquement, on cherche le nombre maxi de lignes contenues dans l'Edit, puis, on boucle de façon à déterminer pour chacune des lignes sa taille, on lit chaque ligne et on place son contenu dans BufferLigne de type TCHAR, puis, on ajoute '\0' à la fin de chaque ligne, enfin, on écrit BufferLigne dans un fichier à la position numérotée de chaque ligne.
Et bien mon prog plante,le fichier texte généré contient pour chaque ligne un nombre toujours identique de caractères. Si la première ligne fait 10 Caractères, toutes les autres sont écrites avec 10 Caractères, et si elles sont plus petites, des caractères parasite sont rajoutés. Si je m'emploie à 'nettoyer' BufferLigne' en remplissant chaque élément par le caractère NULL au moyen d'une boucle, j'ai beau réaffecter à BufferLigne les autres ligne de mon edit, rien ne s'écrit dans mon fichier.
Pour avoir l'intégralité des lignes de mon edit dans mon fichier, il faut que j'enlève l'ajout de \0 à la fin de mes lignes, mais cela laisse d'inombrables caractères parasites.
De plus, si mon Edit comporte des sauts de ligne, il sont remplacés entièrement par les mêmes caractères que la ligne précédente.
Comment faire pour avoir une restitution exacte dans mon fichier des lignes de mon editbox ?
Merci d'avance
LaPatoshe
mardi 16 novembre 2004 à 01:48:23 | Re : Problème de récupération des lignes d'un Edit Multiline

LaPatoshe

Rectificatif : mon edit box se nomme HWND FREInstructionTexte et non EditTexte.
LaPatoshe
mardi 16 novembre 2004 à 07:00:29 | Re : Problème de récupération des lignes d'un Edit Multiline

AlexMAN

Membre Club
Je vois pas pkoi tu t'embetes, tu fais un coup de GetDLgItemText, puis tu parses le buffer avec un pointeur pour trouver '\r\n' ki delimiteront les lignes, voila un exemple de GetDlgItemText :

#include <windows.h>
#include "resource.h"

BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
char buf[520];

switch (message) {
case WM_COMMAND:
if (IDOK == wparam) {
GetDlgItemText(hwnd, IDC_EDIT1, buf, 520);
MessageBox(hwnd, buf, 0, 0);
}else if (IDCANCEL == wparam)
EndDialog(hwnd, 0);
return 0;
default:
return 0;
}
}


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE p, LPSTR q, int r)
{
DialogBoxParam(hInst, (LPCTSTR)IDD_DIALOG1, 0, DlgProc, 0);
return 0;
}

Si tu n'as pas compris, je repasse ce soir.

++ bonne chance
mardi 16 novembre 2004 à 08:54:58 | Re : Problème de récupération des lignes d'un Edit Multiline

ymca2003

astuce pour EM_LINELENGTH :

EM_LINELENGTH
An application sends an EM_LINELENGTH message to retrieve the length of a line, in characters, in an edit control.

EM_LINELENGTH
wParam = (WPARAM) ich; // character index
lParam = 0; // not used; must be zero

!!!! wParam n'est pas le numéro de ligne mais l'indice du premier caractère de la ligne depuis le début du texte !!!

cet indice peut être obtenu à partir du numéro de ligne par
EM_LINEINDEX
wParam = (WPARAM) line; // line number
lParam = 0; // not used; must be zero

ensuite, pour EM_GETLINE, li faut cette fois donner le numéro de ligne et un buffer. Ce buffer doit faire au moins 2 octets (1 WORD) car lors de l'appel, il faut mettre sa taille dans le premier WORD
mardi 16 novembre 2004 à 09:31:00 | Re : Problème de récupération des lignes d'un Edit Multiline

Arnotic

Administrateur CodeS-SourceS
Bonjour,

Une source de mon ami Brunews : http://www.cppfrance.com/code.aspx?id=21272

@+
Arnotic,
Admin CS, MVP Visual C++
mardi 16 novembre 2004 à 18:59:00 | Re : Problème de récupération des lignes d'un Edit Multiline

AlexMAN

Membre Club
Ok, il ne faut donc pas utiliser GetDlgItemText ? Mais pourquoi alors ? parce que ca marche, nan ?

Merci
mardi 16 novembre 2004 à 23:24:44 | Re : Problème de récupération des lignes d'un Edit Multiline

LaPatoshe

Salut AlexMan, j'ai essayé ta méthode, mais elle ne fonctionne pas. Pour info, mon prog est constitué de feuilles et de contrôles (pas de DialogBox). J'ai quand même tenté l'opération GetDlgItemText(hEdit, 0, Buffer, 2000), mais lors de l'écriture de Buffer dans mon fichier, rien n'apparait.
Vu la définition des paramètres demandés dans cette fonction, j'ai usé de SetWindowLong (hEdit, GWL_ID, 1234); pour donner l'identifieur de mon contrôle comme étant 1234, et ensuite j'ai inscrit GetDlgItemText(hFeuille, 1234, Buffer, 2000); Dans mon fichier on retrouve d'enregistrer tout ce que je tape dans l'edit Box. cependant voilà, lorsque je lis ce même fichier, et que je code StDlgItemText(hFeuille, 1234, buffer), il n'apparait dans ma zone de texte que la première ligne, les autres ne s'affichent pas. Cela donne le même résultat que lorsque j'utilisait WM_GETTEXT et WM_SETTEXT.
LaPatoshe
mardi 16 novembre 2004 à 23:55:37 | Re : Problème de récupération des lignes d'un Edit Multiline

LaPatoshe

Je viens de tenter de comprendre l'exemple cité par Arnotic, mais je le trouve un peu complexe, et utilise beaucoup les dialogBox (Y en a pas dans mon prog), quelqu'un aurait il un exemple le plus simple soit il montrant comment récupérer un edit box ligne par ligne ? Merci
LaPatoshe
mercredi 17 novembre 2004 à 01:09:02 | Re : Problème de récupération des lignes d'un Edit Multiline

LaPatoshe

LE crois que je viens de trouver un début de solution à mon problème.

LPSTR Ligne =(LPSTR) malloc (10);
long Pl=0;
long nbLigne = SendMessage(FREInstructionTexte,EM_GETLINECOUNT,0, 0);
for (Pl = 0; Pl < nbLigne; Pl ++)
{
char LigneTexte[2000];
*((WORD*) LigneTexte) = 2000;
ltoa(Pl,Ligne,10);
long cpt=0;
for (cpt=0; cpt<2000; cpt++)
{
szbuff[cpt]= ' ';
}

SendMessage(FREInstructionTexte, EM_GETLINE, (WPARAM) Pl, (LPARAM) LigneTexte);
WritePrivateProfileString("INSTRUCTION", Ligne, szbuff, DCh);
}

*((WORD*) LigneTexte d'après ce que j'ai compris en regardant certaines sources permettrait d'écrire la taille de LigneTexte dans la partie basse de cette variable (comme si LigneTexte pouvait contenir deux choses telle une structure).
Grace à cela, mon prog marche, mes lignes s'inscrivent entièrement dans mon fichier, et les caractères parasites sont remplacés par le caractère d'espacement. C'est un bon début, maintenant, je cherche comment calculer à peu près la place à réserver pour chacune des lignes pour ne pas à avoir à écrire les caractères d'espacement qui sont de beaucoup trop.
Encore Merci pour votre aide.
LaPatoshe
mercredi 17 novembre 2004 à 06:48:08 | Re : Problème de récupération des lignes d'un Edit Multiline

AlexMAN

Membre Club
Ok dsl si ca marche po, j'avais testé chez moi et ca fonctionnait, dsl encore.
Je viens de regarder la source de Brunews, pour connaitre la 'taille d'une ligne', il te faut envoyer un msg EM_LINELENGTH ki te renverra la taille (size = SendMessage(h, EM_LINELENGHT, ..)).
Voila, encore dsl pour le truc ke je t'avais proposé, et pis bonne chance.

ymca & Arnotic > J'aimerais que vous me disiez pourkoi ca ne fonctionne pas GetDlgItemText ? Merci d'avance a vous deux.

++

1 2

Cette discussion est classée dans : fichier, ligne, lignes, edit, bufferligne


Répondre à ce message

Sujets en rapport avec ce message

[C] lignes d'un fichier dans un tableau : Segmentation fault [ par Michel76 ] Bonjour,Pardonnez-moi de cette question de débutant.Soit un fichier contenant :-----001002-----Je souhaiterais mettre chacune des lignes de ce fichier se deplacer a la ligne dans un fichier [ par dletozeun ] est ce que quelqu'un connait une commande,une fonction qui permet de se de placer de lignes en lignes plutot que de caracteres en caracteres?Par ex: p lire fichier ligne par ligne [ par mat74 ] salut a ts je voudrai savoir comment je pourrai lire un fichier lignes par lignes . par exemple une fonction qui me permerttrai de recuperer la ligne pb recuperer nombre de lignes [ par sergio18 ] Bonjourje fais une classe ou je recupere le contenu d'un fichier texte lignes par lignes. Pour cela,j'utilise la fonction fgets et vu qu'elle ne retou lecture d'un fichier ligne par ligne [ par oudkaramla ] salut à tous,j'ai un problème: j'ai un fichier texte contenant quatre lignes.moi je veux lire ces quatre lignes et les stocker chacun dans une variabl lire un ligne non defini... [ par jojomillenium ] Hello! J'ai un souci, je sais pas comment faire! Je dois lire un fichier qui est généré par un autre programme, donc je ne peux pas le modifier. Dans lecture fichier et test des lignes... [ par jojomillenium ] Bonjour, J'aimerai lire un fichier qui ressemble a ca: KJ  1 3 5; I  OPL; B 12 34 78, 90; I  PPL; et ainsi de suite des lignes qui ne sont pas du meme récupérer des lignes d'un fichier txt [ par the_neo_81 ] Bonjour à tous, voila donc ma question.Cela fait un bon moment que je cherche à:    -lire un fichier txt préformater (je sais que tel ligne  = tel inf aide traitement du fichier [ par boualiasma ] J'ai un fichier qui se compose de deux champs : - numero présenté par un entier - attribut présenté par une chaine caractère. On a la même taille po moyennage besoin d'aide [ par cedm237 ] Bonjour, je connais pas grand chose en C, mais j'ai besoin d'un petit code, qui me fasse ceci: -j'ai un fichier contenant 1millions de ligne de coordo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales