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

yarglub 4 Messages postés mercredi 25 août 2004Date d'inscription 18 septembre 2004 Dernière intervention - 18 sept. 2004 à 05:52 - Dernière réponse : yarglub 4 Messages postés mercredi 25 août 2004Date d'inscription 18 septembre 2004 Dernière intervention
- 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
cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention - 18 sept. 2004 à 18:43
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++ );
}

Merci cs_djl 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de cs_djl
cs_Nebula 790 Messages postés samedi 8 juin 2002Date d'inscription 7 juin 2007 Dernière intervention - 18 sept. 2004 à 12:39
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
yarglub 4 Messages postés mercredi 25 août 2004Date d'inscription 18 septembre 2004 Dernière intervention - 18 sept. 2004 à 13:49
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
cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention - 18 sept. 2004 à 14:03
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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 18 sept. 2004 à 14:08
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
cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention - 18 sept. 2004 à 14:11
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
yarglub 4 Messages postés mercredi 25 août 2004Date d'inscription 18 septembre 2004 Dernière intervention - 18 sept. 2004 à 18:15
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
yarglub 4 Messages postés mercredi 25 août 2004Date d'inscription 18 septembre 2004 Dernière intervention - 18 sept. 2004 à 19:07
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.