Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD10] Fonction INI

4 réponses
Avatar
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
Val2=1234 ; 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

4 réponses

Avatar
Romain PETIT
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é)
Avatar
JeAn-PhI
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
Avatar
Romain PETIT
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é)
Avatar
JeAn-PhI
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