Lister les sections d'un fichier ini

Résolu
yarglub Messages postés 4 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 septembre 2004 - 18 sept. 2004 à 05:52
yarglub Messages postés 4 Date d'inscription mercredi 25 août 2004 Statut Membre 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-

8 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 sept. 2004 à 18:43
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++ );
}
3
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
18 sept. 2004 à 12:39
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.
0
yarglub Messages postés 4 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 septembre 2004
18 sept. 2004 à 13:49
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.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 sept. 2004 à 14:03
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.
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 sept. 2004 à 14:08
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++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 sept. 2004 à 14:11
dans un tableau de chaine on peut indexer chaque chaine, ca parais tout de suite plus pratique
0
yarglub Messages postés 4 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 septembre 2004
18 sept. 2004 à 18:15
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-
0
yarglub Messages postés 4 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 septembre 2004
18 sept. 2004 à 19:07
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-
0
Rejoignez-nous