Lister les sections d'un fichier ini [Résolu]

Messages postés
4
Date d'inscription
mercredi 25 août 2004
Dernière intervention
18 septembre 2004
- - Dernière réponse : yarglub
Messages postés
4
Date d'inscription
mercredi 25 août 2004
Dernière intervention
18 septembre 2004
- 18 sept. 2004 à 19:07
Bonjour,

Je travaille sur un prog qui stock les données de clients par années.
Les données sont stockées dans des fichiers ini qui contienent autant de sections que d'années.

exple:
[2001]
...
[2002]
...
[2003]
...

J'aurai besoin de lister les sections dans une ComboBox afin de pouvoir choisir une année à modifier.
J'ai essayé d'utiliser la fonction "GetPrivateProfileSectionNames", mais je n'arrive pas à exploiter son résultat.

De plus je dois récuperer la dernière section pour pouvoir insérer automatiquement l'année suivant.

J'ai retourné le problème dans tous les sens, je ne vois pas comment faire.

Chaque fichier ini à une nombre de sections différent et chaque section à un nombre de clé différent.

Un vrai casse-tête.

Remarques :
- Je ne peux pas utiliser le registre.
- Je suis sous Dev-Cpp.

Si quelqu'un à une solution ???
Merci d'avance.

-yarglub-
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Dernière intervention
27 novembre 2004
3
Merci
pourquoi MAX_PATH ?

utilise pas strstok, ca fera pas ce que tu veux dans ce cas la

fais plutot un truc comme ca (non testé)

pszResult = szTmp;

while( *pszResult )
{
SendMessage(GetDlgItem(g_hWndClt,ID_COMBO_01), CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)pszResult);

while( *pszResult++ );
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_djl
Messages postés
790
Date d'inscription
samedi 8 juin 2002
Dernière intervention
7 juin 2007
0
Merci
Quel est ton problème exact avec cette fonction ?

A priori GetPrivateProfileSectionNames et GetPrivateProfileSection font ce que tu veux, faut juste voir comment tu les utilises.
Commenter la réponse de cs_Nebula
Messages postés
4
Date d'inscription
mercredi 25 août 2004
Dernière intervention
18 septembre 2004
0
Merci
1. GetPrivateProfileSectionNames me renvoi une chaîne ou chaque section est séparée par un caractère de fin de chaîne. Quand je fait ne boucle pour les supprimer, je pars dans une boucle infinie (je ne sais pas pourquoi).
Et quand je cherche à l'utiliser tel quel, seul le nom de la première section est pris en compte (puisque le caractère suivant est un NULL).

2. GetPrivateProfileSection renvoi toutes les clés d'une section; mais moi ce que je veux c'est le nom de la dernière section pour en ajoutée une (ajouter 2004 après 2003 p.e.).

1 -> Plutôt que de chercher à supprimer les caractères fin de chaîne, je vais partir dans la logique inverse et chercher à stocker les années dans un tableau de char (je vais chercher le 1er '2' puis le 1er caractère NULL-1...).

2 -> Dès que je pourais ranger les années dans une ComboBox ce pb sera résolu (je prendrais le dernier index de la combo).

Je vous tiens au courant.

-yarglub-

PS : si je m'en sors je fairais peut-être un tuto sur toutes les fonctions d'un fichier INI, car tous les tutos que j'ai vus ne traitent que de la lecture/écriture d'une seule section/clé.
Et puis comme il n'y a pas 50 fonctions ça devrais pas être trop dûr.
Commenter la réponse de yarglub
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Dernière intervention
27 novembre 2004
0
Merci
utilise GetPrivateProfileSectionNames et parse le tableau de caractere pour extraire chaque chaine dans un tableau de chaine, ca pose vraiment un probleme ?

tout ce qu'il faut savoir
:
Pointer to a buffer that receives the section names associated with the named file. The buffer is filled with one or more null-terminated strings; the last string is followed by a second null character.
Commenter la réponse de cs_djl
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
Mais il l'a deja son tableau dans le buffer, separation par un zero et 2 zeros pour finir est un tres bon format.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Dernière intervention
27 novembre 2004
0
Merci
dans un tableau de chaine on peut indexer chaque chaine, ca parais tout de suite plus pratique
Commenter la réponse de cs_djl
Messages postés
4
Date d'inscription
mercredi 25 août 2004
Dernière intervention
18 septembre 2004
0
Merci
Voila où j'en suis.

Je fais :


char szTmp[MAX_PATH];

GetPrivateProfileSectionNames(szTmp, sizeof(szTmp), g_szStocks);

char* pszResult = NULL;
pszResult = strtok(szTmp, "\0");
while( pszResult != NULL )
{
   SendMessage(GetDlgItem(g_hWndClt,ID_COMBO_01), CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)pszResult);
   pszResult = strtok(NULL, "\0");
}



Mais dans la ComboBox n'apparaît que la première section. Les autres je ne sais pas ce qu'elles sont devenues.

Pourtant szTmp devrait contenir "2001NULL2002NULL2003NULLNULL". Non ???

Là je comprend pas. de plus si j'affiche szTmp dans un MessageBox, il n'affiche que "2001".

Pourtant je suis sûr que la solution est toute simple. Juste parser une chaîne avec le caractère NULL.
Mais j'y arrives pas.

-yarglub-
Commenter la réponse de yarglub
Messages postés
4
Date d'inscription
mercredi 25 août 2004
Dernière intervention
18 septembre 2004
0
Merci
Merci. Ça marche. :)

J'ai encore un peut de mal à manipuler les pointeurs.

Je me doutais bien que je j'étais à côté de la plaque.
Et encore vous n'avez pas vu tout ce que j'ai essayé avant de me décider à demander un coup de main. :blush)

Encore merci à tous les deux.

A+
-yarglub-
Commenter la réponse de yarglub

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.