[WD10] Fonction INI

Le
JeAn-PhI
bonjour

je dois lire des valeurs dans des fichiers INI générés par d'autres
programmes, mon problème se situe sur la gestion des espaces dans les
valeurs lues. ces derniers retournent toujours un format sans ""

exemple :

[SECTION]
Val1="1234 " ; valeur de test
Val234 ; valeur réellement retourné par les programmes
contient un espace en fin

bien que Val1 et Val2 soit identique (contient la valeur "1234 " sans
les ") la fonction INILit se comporte de façon différente à mon grand
regret

pour Val1 il me récupère tout ce qui est compris entre "" donc avec
le(s espace(s)
pour Val2 il me tromque le(s) espaces en fin dans mon exemple

les espaces peuvent être avant ou après et en nombre non déterminé,
dans tous les cas les espaces sont tronqués par la fonction INILit

existe-t-il un moyen à mettre en oeuvre pour que la lecture du fichier
INI me récupère les espaces s'il existe

merci

--
Cordialement JeAn-PhI
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Romain PETIT
Le #14537231
JeAn-PhI vient de nous annoncer :

existe-t-il un moyen à mettre en oeuvre pour que la lecture du fichier INI me
récupère les espaces s'il existe



Ce comportement est bien documenté au niveau de l'API :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getprivateprofilestring.asp

"Avoid specifying a default string with trailing blank characters. The
function inserts a null character in the lpReturnedString buffer to
strip any trailing blanks."

Pour contourner cela, il te suffit d'enregistrer ton paramètre en
remplaçant les éventuels espaces (caract(32)) par des espaces
insécables (caract(160)).
Ne pas oublier évidemment de faire l'opération inverse après la
lecture.

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
JeAn-PhI
Le #14537211
Romain PETIT a émis l'idée suivante :
JeAn-PhI vient de nous annoncer :

existe-t-il un moyen à mettre en oeuvre pour que la lecture du fichier INI
me récupère les espaces s'il existe



Ce comportement est bien documenté au niveau de l'API :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getprivateprofilestring.asp

"Avoid specifying a default string with trailing blank characters. The
function inserts a null character in the lpReturnedString buffer to strip any
trailing blanks."

Pour contourner cela, il te suffit d'enregistrer ton paramètre en remplaçant
les éventuels espaces (caract(32)) par des espaces insécables (caract(160)).
Ne pas oublier évidemment de faire l'opération inverse après la lecture.

A+



merci pour la réponse
je vais avant la lecture ouvrir le fichier faire un remplace global de
Caract(32) par Caract(160) puis une fois la valeur récupérer faire un
remplacement inverse

--
Cordialement JeAn-PhI
Romain PETIT
Le #14537201
Dans son message précédent, JeAn-PhI a écrit :
Romain PETIT a émis l'idée suivante :
JeAn-PhI vient de nous annoncer :

existe-t-il un moyen à mettre en oeuvre pour que la lecture du fichier INI
me récupère les espaces s'il existe



Ce comportement est bien documenté au niveau de l'API :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getprivateprofilestring.asp

"Avoid specifying a default string with trailing blank characters. The
function inserts a null character in the lpReturnedString buffer to strip
any trailing blanks."

Pour contourner cela, il te suffit d'enregistrer ton paramètre en
remplaçant les éventuels espaces (caract(32)) par des espaces insécables
(caract(160)).
Ne pas oublier évidemment de faire l'opération inverse après la lecture.

A+



merci pour la réponse
je vais avant la lecture ouvrir le fichier faire un remplace global de
Caract(32) par Caract(160) puis une fois la valeur récupérer faire un
remplacement inverse



Non non pas besoin !
Tu remplaces ta valeur avant le IniEcrit (par exemple en surchargeant
WL.INIEcrit / WL.INILit)

INIEcrit(sSection,sCle, remplace(sValeur, caract(32),
caract(160),sFichier)

et inversement avec IniLit
sValeur = INILit(sSection, sClé, "", sFichier)
sValeur = remplace(sValeur, caract(160), caract(32))

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
JeAn-PhI
Le #14537161
Romain PETIT a émis l'idée suivante :
Dans son message précédent, JeAn-PhI a écrit :
Romain PETIT a émis l'idée suivante :
JeAn-PhI vient de nous annoncer :

existe-t-il un moyen à mettre en oeuvre pour que la lecture du fichier
INI me récupère les espaces s'il existe



Ce comportement est bien documenté au niveau de l'API :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getprivateprofilestring.asp

"Avoid specifying a default string with trailing blank characters. The
function inserts a null character in the lpReturnedString buffer to strip
any trailing blanks."

Pour contourner cela, il te suffit d'enregistrer ton paramètre en
remplaçant les éventuels espaces (caract(32)) par des espaces insécables
(caract(160)).
Ne pas oublier évidemment de faire l'opération inverse après la lecture.

A+



merci pour la réponse
je vais avant la lecture ouvrir le fichier faire un remplace global de
Caract(32) par Caract(160) puis une fois la valeur récupérer faire un
remplacement inverse



Non non pas besoin !
Tu remplaces ta valeur avant le IniEcrit (par exemple en surchargeant
WL.INIEcrit / WL.INILit)

INIEcrit(sSection,sCle, remplace(sValeur, caract(32), caract(160),sFichier)

et inversement avec IniLit
sValeur = INILit(sSection, sClé, "", sFichier)
sValeur = remplace(sValeur, caract(160), caract(32))



les fichiers sont générés par des programmes tiers dont je ne peux
modifier le comportement donc je récupère les fichiers tels quels

et puis je ne fais que des INILit jamais de INIEcrit

mais merci tout même cela me permet de continuer sans apporter d'énorme
modification dans ma classe de gestion d'accès en lecture à ces
fichiers spécifiques

--
Cordialement JeAn-PhI
Publicité
Poster une réponse
Anonyme