IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Fichier INI + ComboBox = listing de valeurs[obsolète] [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Points : 70
    Points
    70
    Par défaut Fichier INI + ComboBox = listing de valeurs[obsolète]
    Bonjour à tous,

    Pour découvrir le C# et m'y habituer, j'essaie de créer un petit utilitaire qui tourne autour d'un fichier INI.

    Dans ce fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [MaSection]
    Key1 = "Ma valeur 1"
    Key2 = "Ma valeur 2"
    Key3 = "Ma valeur 3"
    J'arrive à éditer cette section (mais pas encore à supprimer une valeur précise, je garde ça pour la fin) et à rajouter des nouvelles entrèes, seulement je bute un peu sur le fait de charger la section entière comme items d'une combobox.

    Au début de mon code j'ai donc ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private ComboBox comboBox1;
     
    public frmHome()
            {
                this.InitializeComponent();
                ///
                /// initialise la combo
                /// 
                cIni ini = new cIni(@".\test.ini");
                // le code erroné
                this.comboBox1.Items = ini.ReadValues("MaSection");
            }
    Evidemment, Visual Studio m'insulte copieusement car j'utilise ce sample trouvé sur internet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    namespace MonSoft
    {
        using System;
        using System.Runtime.InteropServices;
        using System.Text;
     
        internal class cIni
        {
            private int li_BufferLen = 0x100;
            private string ls_IniFilename;
     
            public cIni(string pIniFilename)
            {
                this.ls_IniFilename = pIniFilename;
            }
     
            [DllImport("kernel32", SetLastError=true)]
            private static extern int GetPrivateProfileString(string pSection, string pKey, string pDefault, byte[] prReturn, int pBufferLen, string pFile);
            [DllImport("kernel32", SetLastError=true)]
            private static extern int GetPrivateProfileStruct(string pSection, string pKey, byte[] prReturn, int pBufferLen, string pFile);
            public void ReadSections(ref Array pSections)
            {
                pSections = this.z_GetString(null, null, null).Split(new char[1]);
            }
     
            public string ReadValue(string pSection, string pKey)
            {
                return this.z_GetString(pSection, pKey, "");
            }
     
            public string ReadValue(string pSection, string pKey, string pDefault)
            {
                return this.z_GetString(pSection, pKey, pDefault);
            }
     
            public void ReadValues(string pSection, ref Array pValues)
            {
                pValues = this.z_GetString(pSection, null, null).Split(new char[1]);
            }
     
            public void RemoveSection(string pSection)
            {
                WritePrivateProfileString(pSection, null, null, this.ls_IniFilename);
            }
     
            public void RemoveValue(string pSection, string pKey)
            {
                WritePrivateProfileString(pSection, pKey, null, this.ls_IniFilename);
            }
     
    //----------------- Ici le "ReadSection" manquant que je n'arrive pas à coder
     
            [DllImport("kernel32", SetLastError=true)]
            private static extern int WritePrivateProfileString(string pSection, string pKey, string pValue, string pFile);
            [DllImport("kernel32", SetLastError=true)]
            private static extern int WritePrivateProfileStruct(string pSection, string pKey, string pValue, int pValueLen, string pFile);
            public void WriteValue(string pSection, string pKey, string pValue)
            {
                WritePrivateProfileString(pSection, pKey, pValue, this.ls_IniFilename);
            }
     
            private string z_GetString(string pSection, string pKey, string pDefault)
            {
                string str = pDefault;
                byte[] prReturn = new byte[this.li_BufferLen];
                int count = GetPrivateProfileString(pSection, pKey, pDefault, prReturn, this.li_BufferLen, this.ls_IniFilename);
                return Encoding.GetEncoding(0x4e4).GetString(prReturn, 0, count).TrimEnd(new char[1]);
            }
     
            public int BufferLen
            {
                get
                {
                    return this.li_BufferLen;
    N'arrivant pas à utiliser correctement le "ReadValues", je me suis dit qu'il était plus judicieux de crèer un ReadSection spécifique à l'utilisation pour une combo... seulement je cale méchemment après plusieurs essais infructueux.

    Si quelqu'un pouvait m'aiguiller, ce serait très sympa car je ne sais pas où orienter mes recherches : kernel32, vérifier si ce cIni.cs est vraiment nécessaire ou pas ...

    Bonne journée !

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    En fait, y'a un truc qui me choque. Pourquoi utiliser un fichier ini? C'est un peu obsolète comme pratique. Quel est le besoin derrière?

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Points : 70
    Points
    70
    Par défaut
    Parce que c'est un terrain connu pour moi (sections/key/value), mais il n'y a aucun besoin derrière si ce n'est apprendre à manipuler des fichiers en C#.

    Disons que ça facilite ma lecture (déjà difficile à mon niveau) de la classe cIni montrèe plus haut.

    Tu suggères à demi-mot un autre format; disons que je voulais éviter de binder la combo avec une base ou un fichier reconnu par VS pour vraiment me mettre au pied du mur au niveau code. C'est le seul véritable cahier des charges que j'ai, la voie maso

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Je ne sais pas à quoi pense Nathanael (J'espère que j'écorche pas le prénom :3) mais j'imagine que du XML serait bien mieux. Déjà tu apprends à écrire/modifier/supprimer des infos dans un fichier, mais en plus tu vois le parsing qui est un aspect intéressant. Le plus important est qu'aujourd'hui la plupart des fichiers enregistrés et utilisés par des applis sont en XML, si tu poursuis donc dans cette voie, tu auras à coup sur à en manipuler.

    Encore autre avantage : Tu pourras t'essayer à Linq to Xml et Linq to Objects qui sont deux outils extrêmement puissants
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Si c'est pour la configuration d'une application, y'a tout une partie de .Net concue pour avec des fichiers de configuration spécifiques.

    Si c'est pour des données, effectivement le xml peut être adapté et est beaucoup plus simple à manipuler.

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Points : 70
    Points
    70
    Par défaut
    Disons qu'avec le XML j'avais peur de tomber d'entrèe sur de l'ODBC, du SQL et autres douceurs que je n'ai pas encore le niveau d'aborder. Ayant un profil "système", le fourre-tout INI m'est venu naturellement à l'idée.

    Je vais me renseigner pour repartir sur du XML donc, autant être cohérent dans son apprentissage.

    Merci à vous deux pour votre re-aiguillage, je vais aller à la pêche aux infos.

    Rajout : Oui en effet Nathanael, c'est pour manipuler à la fois des donnèes et une pseudo-configuration de l'application. Pour me simplifier la tâche j'ai fait le choix de tout rassembler dans un seul et même fichier (toujours dans une optique d'apprentissage quant à l'écriture/lecture, j'ai bien conscience que c'est une aberration à terme).

  7. #7
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    xml plus simple, mais plus volumineux... certains diront qu'ils n'en veulent pas et préfèrent le fichier plat (en général à champs taille fixe)... c'est ce que mes anciens clients voulaient, par exemple.

    ensuite, les choix du client, ça ne se discute pas !

    Edit, je parle biensur de données...
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par Codename Voir le message
    Disons qu'avec le XML j'avais peur de tomber d'entrèe sur de l'ODBC, du SQL et autres douceurs que je n'ai pas encore le niveau d'aborder. Ayant un profil "système", le fourre-tout INI m'est venu naturellement à l'idée.

    Je vais me renseigner pour repartir sur du XML donc, autant être cohérent dans son apprentissage.

    Merci à vous deux pour votre re-aiguillage, je vais aller à la pêche aux infos.

    Rajout : Oui en effet Nathanael, c'est pour manipuler à la fois des donnèes et une pseudo-configuration de l'application. Pour me simplifier la tâche j'ai fait le choix de tout rassembler dans un seul et même fichier (toujours dans une optique d'apprentissage quant à l'écriture/lecture, j'ai bien conscience que c'est une aberration à terme).
    SQL et XML sont deux choses completement distinctes!

  9. #9
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Points : 70
    Points
    70
    Par défaut
    Je viens de regarder et en effet le format plat me semble au prime abord plus familier, je comprend la demande de ces clients du point de vue "admin". Merci pour la référence, une fois le XML en main je pense m'y interresser.

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Citation Envoyé par kheironn Voir le message
    ensuite, les choix du client, ça ne se discute pas !
    Change de client

    sinon bon il y a souvent moyen de les convaincre
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  11. #11
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Change de client

    sinon bon il y a souvent moyen de les convaincre
    va dire à une boite comme DHL de changer ses flux de données avec tous les logisticien avec lesquels ils travaillent !
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  12. #12
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Points : 70
    Points
    70
    Par défaut
    Je me permet de revenir à la charge pour un éclaircissement sur le format xml, car quelque chose me chiffonne.

    Je suis en train de suivre ce tutoriel : Lecture et écriture dans un fichier XML avec XPath, que je trouve clair dans l'ensemble et utile pour ce que je veux étudier. Pour ce faire, j'essaie de réécrire le projet-exemple dans un autre contexte (très similaire mais suffisemment différent pour me forcer à rentrer dans le détail de chaque fonction).

    Ce qui m'a choqué c'est l'utilisation d'une librairie propriétaire à la structure du fichier XML utilisé (hierarchie, balises...). Si je prend cet exemple pour argent comptant, j'en déduis que pour chaque type de fichier XML il faut développer une librairie (dll) et une classe spécifique.

    Est ce une particularité du XML avec C#/VS ?

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Ce qui m'a choqué c'est l'utilisation d'une librairie propriétaire à la structure du fichier XML utilisé (hierarchie, balises...). Si je prend cet exemple pour argent comptant, j'en déduis que pour chaque type de fichier XML il faut développer une librairie (dll) et une classe spécifique.
    Où tu as vu ca?
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  14. #14
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Points : 70
    Points
    70
    Par défaut
    Dans le projet-exemple, la classe Data.cs utilise :

    public static StructureLibrary.Client SearchCustomerById(string ID)

    Et StructureLibrary est une DLL que l'on retrouve dans References avec le format spécifique du fichier XMl utilisé (client/firstname, client/ID etc...).

  15. #15
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Ben dans ledit tutoriel, le rédacteur se sert de ce qu'il lit dans le XML pour instancier ses objets. Mais libre a toi de retourner des strings ou des dictionnaires si tu preferes.

  16. #16
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 17
    Points : 70
    Points
    70
    Par défaut
    En effet ça fonctionne aussi, merci pour l'éclaircissement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/04/2008, 06h44
  2. Réponses: 6
    Dernier message: 02/04/2008, 16h32
  3. Réponses: 1
    Dernier message: 23/05/2007, 11h49
  4. Récupérer valeurs d'un fichier ini en php5
    Par lenoil dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2007, 16h05
  5. Réponses: 2
    Dernier message: 05/07/2006, 09h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo