Salut,
Je pense que, dans les .INI, pour une section donnée, une clé doit être associée à une unique valeur, et donc, qu'il n'y a pas de fonction dans l'API win32 pour gérer des associations multiples. Mais, comme tu sais obtenir le contenu de la section, tu es en mesure de le parser ; voici une routine qui parse ce contenu pour le placer dans un multimap ( dictionnaire dont la valeur d'une clé n'est pas forcément unique ).
#include <string> #include <sstream> #include <map> ... void section_2_dico( const char * str , size_t sz , multimap< string , string > & dic ) { istringstream section( string( str, sz ) ); string line , key , value ; while ( getline( section, line , '\0' ) ) { istringstream iss( line ); if ( getline( iss , key , '=' ) && getline( iss , value ) ) { dic.insert( pair< string , string >( key , value ) ); } } } ...
Exemple d'utilisation :
int main() { //lecture de la section const size_t max_size( 32767 ); char tab[ max_size ]; size_t size = GetPrivateProfileSection( "SECTION" , tab , max_size , "./test_section.ini" );
//construction dictionnaire multimap< string , string > dico; section_2_dico( tab , size , dico );
//affichage du dictionnaire for ( multimap< string , string >::iterator it = dic.begin() ; it != dic.end() ; it++ ) { cout << it->first << " = " << it->second << endl ; } }
|