Gestion des fichiers ini

Résolu
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 6 septembre 2019 - 2 mars 2011 à 10:57
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 6 septembre 2019 - 2 mars 2011 à 14:57
Bonjour à tous,

A l'heure actuelle, j'utilise les fonctions suivantes pour gérer mes fichiers INI :
Private Declare Function GetPrivateProfileInt Lib "kernel32.dll" _
                Alias "GetPrivateProfileIntA" ( _
                ByVal lpApplicationName As String, _
                ByVal lpKeyName As String, _
                ByVal nDefault As Integer, _
                ByVal lpFileName As String _
                ) As Integer

    Private Declare Function GetPrivateProfileString Lib "kernel32.dll" _
                Alias "GetPrivateProfileStringA" ( _
                ByVal lpApplicationName As String, _
                ByVal lpKeyName As String, _
                ByVal lpDefault As String, _
                ByVal lpReturnedString As String, _
                ByVal nSize As Integer, _
                ByVal lpFileName As String _
                ) As Integer

    Private Declare Function WritePrivateProfileString Lib "kernel32.dll" _
                Alias "WritePrivateProfileStringA" ( _
                ByVal lpApplicationName As String, _
                ByVal lpKeyName As String, _
                ByVal lpString As String, _
                ByVal lpFileName As String _
                ) As Integer


Je me suis rendu compte que la différence de temps d'accès entre un fichier d'une taille de 300 ko et un fichier d'une taille de 25Mo est absolument démentielle (de 0.05s à 15s), alors que les sections auxquelles j'accède sont dans les premières lignes dans les deux cas...
Je n'avais pas réalisé que le temps d'exécution de ces fonctions dépendaient de la taille du fichier et non de la localisation des sections dans le fichier...ce que je ne comprends toujours pas d'ailleurs.

Bref, je pourrais très bien faire du ligne par ligne mais ça ne m'arrange pas vraiment.

Existe t'il des fonctions plus rapides quelque soit la taille du fichier pour lire dans une section, la valeur d'une clé dans un fichier .ini ?

Notes : Je ne peux pas utiliser de fichier XML et j'utilise le framework 2.0.

Merci

4 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 mars 2011 à 14:47
En fait, ce n'est pas un fichier ini. C'est un enregistrement .txt, mais écrit à la façon d'un .ini avec des sections et des clés.
On peut donc dire que c'est un fichier ini, quelque soit le nom ou l'extension qu'il porte.

Pour reformuler, comment lire des informations dans un .txt en évitant les fonctions présentées dans ma question mais en conservant le système de sections et clés pour se repérer.
A part faire ton propre parser, je ne voit pas. Mais tu ne fera rien de mieux, de toute façon, que de lire ligne par ligne pour lister les sections, puis les clés avec leurs valeurs. Ce que font les api que tu utilise.

Au pire peut-être, utiliser les fonctions classique de lecture de fichier texte en lisant la totalité du fichier dans une string et en utilisant les fonctions de recherche ensuite sur cette string avec les mots clé correspondant à tes sections ou clés, si l'organisation de ton fichier le permet évidemment.
C'est à essayer, mais il n'est pas dit que tu gagne quoique ce soit.

Sinon, le format de base de mon fichier est malheureusement à conserver, Est ce possible d'utiliser des bases de données access ou excel comme tu le dis mais en conservant au maximum le format initial de mon fichier ?
Non, tu utilisera le format propre à ces applications.
A quelle licence suis-je exposer ? les licences office pour avoir accès au dll access et Excel ? A t'on le droit de les transmettre à un client sans acheter office ?

C'est un point que je ne maitrise pas. Jusqu'à Office2003, tout au moins pour Excel, il fallait des composants spécifiques qui ne pouvait (selon la licence) être installés que par une installation d'Office.
Avec les nouveaux formats, accessible normalement sans que les applications correspondantes soient installées, je ne sais pas ce qu'il en est.
Pour Word et Excel notamment, ces nouveaux format sont en réalité une structure de fichier xmls. Alors autant utiliser directement du xml.

Pour SQLServer CE, le moteur d'accès est inclu dans le framework, tu peux donc utiliser ce type de base. De même pour SQLite, il faut télécharger les drivers du moteur d'accès pour développer. Ce moteur d'accès est ensuite directement inclu dans l'exécutable à la compilation.

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 mars 2011 à 13:25
25Mo dans un fichier ini, j'aurais jamais osé !!!
Ya quoi dans ton fichier pour qu'il soit si gros

Le fichier ini, à la base, c'est plutôt plus pour sauvegarder des configurations, pas pour servir de base de données.

Si c'est pour servir de base de données, tu peux peut-être t'orienter vers des bases type fichier (si tu n' pas envie de t'embêter avec des serveurs) comme par exemple Access, Excel, SQLite, SQLServer Compact Edition, ....


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 6 septembre 2019
2 mars 2011 à 14:22
Salut Casy,

Merci pour ta réponse. J'ai un peu édulcoré ma question...
En fait, ce n'est pas un fichier ini. C'est un enregistrement .txt, mais écrit à la façon d'un .ini avec des sections et des clés.

Pour reformuler, comment lire des informations dans un .txt en évitant les fonctions présentées dans ma question mais en conservant le système de sections et clés pour se repérer.

Je sais que je peux faire du ligne à ligne mais ça implique une comparaison des sections puis des clés, ce qui fait qu'en plus d'être lourd à coder, je ne suis pas sûr que ça sera plus rapide.
Une idée pour lire rapidement des sections et clés ?

Sinon, le format de base de mon fichier est malheureusement à conserver, Est ce possible d'utiliser des bases de données access ou excel comme tu le dis mais en conservant au maximum le format initial de mon fichier ?
A quelle licence suis-je exposer ? les licences office pour avoir accès au dll access et Excel ? A t'on le droit de les transmettre à un client sans acheter office ?

Merci de ton aide
0
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 6 septembre 2019
2 mars 2011 à 14:57
Merci pour ces pistes...
A+
0
Rejoignez-nous