Remplisage List Box a partir fichier

Résolu
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004 - 7 août 2004 à 16:03
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004 - 7 août 2004 à 18:01
Bonjour.

Dans mon programme je lis un fichier et je souhaite ensuite remplir une List Box avec les donnée contenues dans ce fichier.
Il s'agit d'une suite de chiffre de ce type :
1
2
3
4
5
6
etc...

J'arrive tres bien a afficher dans la list box avec un SendMessage mais les chiffres sont tous a la suite 123456 etc...

Connaitriez vous un moyen de les séparer de facon a ce qu'il apparaissent les uns en dessous des autres ? (genre token peut etre mais je ne sais pas m'en servir...)

Autre question, est il possible de faire la meme manip mais a partir d'un fichier excel ?

Merci

T.

18 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
7 août 2004 à 17:14
Utilise ce que t'a donné Brunews ou au pire mon code, sera plus simple et infaillible.

++
3
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
7 août 2004 à 16:26
Ben tu recup ta chaine 123456789 puis envoie caractere par caracteres.
Pour ta 2eme kestion, je ne sais pas.

++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 16:32
Si tes chiffres sont 1 par ligne comme dans l'exemple plus haut, je ne vois pas la raison pour qu'ils arrivent a la fin en une chaine dans la listbox.
Pour un vrai Excel binaire faudra te servir de directive #import sur ses librairies. VS te generera les tli et tlh necessaires. Regarde mes exemples ADO pour #import.

ciao...
BruNews, Admin CS, MVP Visual C++
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
7 août 2004 à 16:38
oué on peut faire ca mais va va plus fonctionner des que l'on depasse 9....

J'ai pondu ca comme code :


GetDlgItemText(hWnd,IDC_PATH,buf,256);
hList=GetDlgItem(hWnd,IDC_LOADING);
hFile = CreateFile(buf,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE) 
   { MessageBox(hWnd,"Erreur d'ouverture de fichier", "Error",MB_OK);
return 0;
}
ReadFile(hFile,szvalloading,bytestoread, &Read,NULL);
CloseHandle(hFile);
if (!Read) MessageBox(hWnd,"vide","vide",MB_OK);

pointeur = strtok( szvalloading, separator );

SendMessage (hList, LB_ADDSTRING, 0, (LPARAM) pointeur) ;

while (pointeur !=ULL){
    pointeur=strtok(NULL,separator);
    SendMessage(hList,LB_ADDSTRING,0,(LPARAM) pointeur);
}


pointeur est un char * , separator est le caractere "\n", szvalloading le tableau ki possede les valeurs non séparées.

Mais ca plante, il n'ffiche meme pas dans la list box, il plante tout de s uite. Par contre quand je /* */ le while il m'affiche bien le premier caractere de mon tbleu.

Si tu connais un moyen de parcourir la chaine qi fonctionne, je suis preneur.

merci

T.
0

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

Posez votre question
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
7 août 2004 à 16:41
Brunews: je suis bien d'accord avec toi mais je te promet que c'est le cas. J'ai refait mes fichier text et ils sont bien dans l'ordre suivant:
1
2
3
4
5
etc...

Quand je lis mon fichier il me stock ces valeurs dans un tableu szvalloading (tableau de char, peut etre devrai je mettre des double ?) et le SendMessage les afiches 123456... dans les ListBox....
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
7 août 2004 à 16:43
je te rappelle kun saut a la ligne est codé sur deux octet sous win ! "\r\n" a mettre ds separator.

++
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
7 août 2004 à 16:44
ok je savais pas.

Je vais tester ca tout de suite

Merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 16:44
Faudrait chercher dans le forum, j'avais deja mis cet exemple.

ciao...
BruNews, Admin CS, MVP Visual C++
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
7 août 2004 à 16:45
mmm ca change rien il plante toujours a cause du while...

Je vais voir si je trouve l'exemple de Brunews.
Si jamais vous voyez pourquoi ca plante...

T.
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
7 août 2004 à 16:47
ds ton while, "!= ULL " ??? Je pense que c une erreur de frappe, mais sait on jamais..
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
7 août 2004 à 16:49
oué c'est effectivement une erreur de frappe.

Sur mon projet il y a bien un NULL.

Mais malheureusement il plante toujours...

Est ce que cela pourrait etre du au fait que le while ne s'arrete jamais ??
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
7 août 2004 à 16:52
ok j'ai trouvé....

J'ai juste rajouté la ligne suivante dans le while :

if (pointeur !=NULL){
SendMessage(.....)
}

Et ca fonctionne.

Reste a empecher qu'il classes les chiffres tout seul au lieu de les mettre dans l'ordre du fichier !!
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
7 août 2004 à 16:54
je te conseille de coder ca avec des pointerus, plus simple je pense :

char sznumber[] = "1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n";
char *s = sznumber;
char buf[12], *b;

while (*s) {
b = buf; while (*s !'r') *b++ *s++;
*b = 0; s += 2; //+2 sauter \r\n
SendMessage(..., (LPARAM)buf);
}

Avec ca, tu pourras recuperer tt tes nombres, peu importe leur taille..

++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 16:56
Mais c'est hyper simple a faire.
Recup len fichier.
Alloue len+1 octets (char *pmem).
ReadFile len octets.
Ferme fichier.
pmem[len] = 0;
place pointeurs *c et *d sur pmem, *pout sru pmem+len.
while(c < pout) {
// je te laisse chercher ici
}

ciao...
BruNews, Admin CS, MVP Visual C++
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
7 août 2004 à 16:59
bah en fait la ca fonctionne tres bien, le seul truc c'est que j'obtien les chiffres en odre décroissant au lieu d'un ordre croissant c tout.

Merci.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 août 2004 à 17:04
Faut aussi decocher le style 'sort' de la listbox.

ciao...
BruNews, Admin CS, MVP Visual C++
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
7 août 2004 à 17:07
Je l'avais fait deja avant de poster mais ca ne change rien, j'obtiens toujours les chiffres en ordre décroissant....
0
pidoumtimo Messages postés 65 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 18 août 2004
7 août 2004 à 18:01
ok ca fonctionne

Merci les gars.
0
Rejoignez-nous