ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Fonction permettant de lire une clé dans un fichier INI   



L'auteur

Robert Plagnard
France France
Membre Simple
# 0000000031
enregistré le 15/10/2004

http://www.ingelog.fr
PLAGNARD Robert
75015 PARIS
de la société IngéLog
Fiche personnelle


Note des membres
16,7/20
3 votes


Contributions > 01 - PRG : Programmation

Fonction permettant de lire une clé dans un fichier INI
# 0000000114
ajouté le 02/12/2004 19:24:48 et modifié le 02/12/2004
consulté 10709 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0

Description

La fonction GetPPS (pour Get Private Profile String) permet de lire façilement une clé dans une section d'un fichier INI. Les fichiers INI restent un moyen simple de paramétrer un certain nombre d'options dans un fichier texte à l'extérieur de l'application.

Cette toute petite fonction illustre l'appel d'une fonction de l'API windows qui rend une chaine de caractère. En initialisant lcBuffer on réserve de la place et on passe l'adresse dans l'appel de la fonction. La fonction de l'API rend une chaine qui se termine par un zéro binaire (convention de C) mais rend aussi le nombre de caractères de la chaine non compris le zéro, d'ou l'importance de l'utilisation de Left() dans l'expression retournée.

Code source :
* --- Création d'un fichier INI pour tester la fonction GetPPS
   local lcFichIni
   lcFichIni = addbssys(2023) ) + sys(2015) + '.ini'
   set textmerge to ( m.lcFichIni )
   text noshow textmerge
     [Chemin]
     root = C:\Something\Application\
     data = data\
     prog = source\
     [Param]
     Preview = .T.
   ENDTEXT
   set textmerge to

   * --- Test de la fonction
   ? GetPPS( m.lcFichIni, "Chemin""root"  , "" )
   ? GetPPS( m.lcFichIni, "Chemin""Backup""Non prévu" )
   ? GetPPS( m.lcFichIni, "Chemin""prog"  , "Non prévu" )
   ? evaluate( GetPPS( m.lcFichIni, "Param" , "Preview"".F." ))

   * --- Ménage
   erase ( m.lcFichIni )

endproc

*/------------------------------------------------------------------------------
function GetPPS  && Get Private Profile String
*/------------------------------------------------------------------------------
lparam ;         && Retourne la valeur (string) d'une clé dans un fichier INI
   tcFicIni,  ;  && Nom (chemin complet) du fichier INI
   tcSection, ;  && Section dans laquelle on recherche la clé
   tcCle,     ;  && Clé recherchée
   tcDefaut      && Valeur par défaut si fichier INI ou clé non trouvé

   declare integer GetPrivateProfileString in win32api as GetPrivateString ;
      string Section  ,;
      string Clef     ,;
      string Defaut   ,;
      string @ buffer ,;
      long   BufSize  ,;
      string IniFile

   local  lcBuffer
   local  lnLen

   lcBuffer = space( 255 )
   lnLen = GetPrivateString( m.tcSection, m.tcCle, m.tcDefaut, @m.lcBuffer, len(m.lcBuffer), m.tcFicIni )
   return alltrimleft( m.lcBuffer, m.lnLen ) )

endfunc


Commentaires
le 07/12/2004, EmanuelL a écrit :
Merci Robert,

Cette fonction m'a permis de mettre tous les chemins d'accès et d’affecter de valeurs par défaut de certaines variables selon utilisateur.

EmanuelL

le 07/12/2004, EmanuelL a écrit :
PS : dans un fichier.INI.

EmanuelL

le 25/03/2009, steber a écrit :
Merci. Ca m'a permis de trouver directement une manière efficace de lire dans un fichier INI. Comme j'avais aussi besoin de pouvoir écrire la valeur d'une clé dans une section d'un fichier INI, j'ai écrit une fonction similaire. La voici au cas où ça pourrait servir à quelqu'un.
steber

function WritePPS && Write Private Profile String
lparam ; && Ecrit la valeur (string) d'une clé dans un fichier INI
tcFicIni, ; && Nom (chemin complet) du fichier INI
tcSection, ; && Section dans laquelle on recherche la clé
tcCle, ; && Clé recherchée
tcValeur && Valeur à positionner

declare integer WritePrivateProfileString in win32api as WritePrivateString ;
string Section ,;
string Clef ,;
string Valeur ,;
string IniFile

local lnLen

lnLen = WritePrivateString( m.tcSection, m.tcCle, m.tcValeur, m.tcFicIni )

IF m.lnLen > 0
return .T.
ELSE
return .F.
ENDIF
endfunc


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3