GESTION DE FICHIERS INI AVANCÉE

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 3 août 2004 à 23:49
user_steph Messages postés 1 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 13 janvier 2005 - 13 janv. 2005 à 15:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25141-gestion-de-fichiers-ini-avancee

user_steph Messages postés 1 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 13 janvier 2005
13 janv. 2005 à 15:12
Serait il possible d'avoir un petit example d'utilisation de la fonction GetKeysCollection :
Appel de la fonction, utilisation de l'objet collection en retour d'appel???

Merci d'avance...
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
4 août 2004 à 21:13
Hélas, ces apis on des limites... donc je crois que je vais carrément créer mon propre système ini en vb. Je vais essayer d'optimiser ça le plus possible donc cette source est discontinuée...
cs_PaTaTe Messages postés 2126 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
4 août 2004 à 13:06
un pti zip serait le bienvenue pour moi parceke g essayé ce code et g un appel de procedure incorrect ...
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 août 2004 à 09:48
pour le GetKeysCollection , je verrai bien une fonction qui ferait une énumération (Streaming)..... la totalité du fichier INI ne se retrouverais pas ainsi en mémoire

du genre :

ResetEnum '# Mise a 0 des variables qui indexent la position dans le fichier INI
While GetKeysCollection ( Nom , Val )
'# Traitement sur les entrées renvoyées....
Wend
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 août 2004 à 09:46
Ok avec vlad2i sur ces remarques judicieuses....

Il vaut mieux tester la longueur d'une chaine pour savoir si elle est vide. De plus, utiliser lenB plutot que len... ca fais une division en moins ;-)
vlad2i Messages postés 285 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 13 février 2005
4 août 2004 à 09:37
Je reprends les remarques en continuant...

1. Effectivement un String est plus adapté, surtout que VB n'a pas a faire de conversion de type à ta place, ton programme gagne en rapidité, et tu pourras te vanter d'avoir un code propre...

2. J'ajouterais meme qu'utiliser une Collection n'est pas plus adapté, ca crée toute une instance pour ce qui pourrait etre, une fois de plus, un tableau de String...

3. Utiliser ByVal pour un String est absolument inutile, étant donné qu'un pointeur String fait 10 octet, et que le texte à copier fait forcément + (10octets+texte), autant utiliser ByRef, sinon avec de gros textes ton programme sera très très ralenti....

4. De même, l'utilisation de Empty, qui ne représente rien... Tu aurai pu mettre à la place de

If Trim(Col(I))=Empty Then

un bon

If LenB(Trim$(Col(I))) = 0 Then

Propre, plus rapide, et n'utilise pas de variants :)
Voilà de quoi bien optimiser :)
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
4 août 2004 à 09:00
Dim Col() as String
Col = Split(strBuf, vbNullChar)
... fonctionne tres bien sans variant !!
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
4 août 2004 à 00:42
il y a un 2 qui dit que je split en 2 au max pi je préfère utiliser col(i) plûtot que d'avoir à passer par un variable string temporaire. Le seul problème, c'est la stupide limite de string car elle ne prend que le variant mais elle est dans les dll de vb donc, plus rapide qu'une fonction que j'écrirais moi-même. Pour éviter d'avoir à utiliser split pour séparer le nom de la clée et de la valeur, j'aurais pu faire appel à
lngpos=instr(1,col(i),"=")
if lndpos <> 0 then
strnom=left$(col(i),lngpos-1)
strval=mid$(col(i),lngpos)
end if
mais ça aurait été encore plus lourd...
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
4 août 2004 à 00:35
Un bon vieux tableau de string aurait fait l'affaire, tu ne crois pas ?
En plus tu trouves pas que "Col2 = Split(col(I), "=", 2)" c'est un petit peu violent !! D'autant plus que si tu as une valeur contenant un ou plusieurs signe "=", ce qui n'est pas impossible, et bien tu va rater la fin de la valeur !!!
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
4 août 2004 à 00:12
Je n'utilise que 2 Variants : Col et Col2, dans la procédure GetKeysCollection car c'est uniquement ce type que supporte Split, qui simplifie le splittage de string.
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
3 août 2004 à 23:57
Je n'utilise JAMAIS le VARIANT sauf pour SPLIT CAR VARIANT EST DE LA SCRAP!!. Je n'utilise que String. Pour la gestion d'erreur, c'est un peu inutile dans certains cas mais je vais voir ce que je peux faire car quand on veut lire une clée, il a une valeur par défaut donc pas d'erreur...
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
3 août 2004 à 23:49
C'est pas mal comme code, mais éviote les variants !! Tu en as collé un peu partout et ca, c'est pas bien !! - Je sais, c'est une manie chez moi, je chasse les variant (et les End) comme Van Helsing chasse le Comte Dracula). Tu devrais aussi gérer les valeurs retournées par les API et mettre une ou deux gestions d'erreur.
Voila, un jolie petit 7/10 pour toi
Rejoignez-nous