Récupération de données avec Windows Forms

Stapled Messages postés 34 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

Je suis en train de développer une application sur Windows Forms comprenant de la sauvegarde données sur fichiers ini.
Ces fichiers contiennent des fiches de personnages (nom, age, caractéristiques etc.).
J'aimerai dans un Form, récupérer ces données afin que les noms et prénoms soient affichées dans une listview.

Avez-vous une idée pour y arriver ?

Merci d'avance,

Stapled

2 réponses

  1. Utilisateur anonyme
     
    Bonsoir, un fichier ini c'est désuet et ça servait à sauvegarder la configuration du logiciel, pas les données métiers.
    Pour la configuration du logiciel, Visual Studio intègre directement un fichier spécifique (au format xml),
    vois ici
    https://cdiese.fr/fichier-de-configuration-en-net-en-10-min/
    ou là
    https://nico-pyright.developpez.com/tutoriel/vc2005/configurationsectioncsharp/

    Pour les données métiers, c'est dans une base de données qu'il faut les stocker, tu peux la constituer avec un fichier texte (csv, xml, json...) si tu as peu de données. Tu peu aussi utiliser excel. Enfin tu peux te servir d'une "vraie" base de données (Access, sqlserver, mysql etc...).

    Pour le xml, ma préférence va à LinqToXml https://codes-sources.commentcamarche.net/faq/11196-linq-to-xml-c-et-vb-net
    Pour Excel, tu peux te servir de l'API https://codes-sources.commentcamarche.net/source/50624-piloter-excel-via-microsoft-office-interop-excel mais ça oblige à disposer d'Excel sur le PC et c'est un peu long à l'exécution car tu lances excel et tu le pilotes pas à pas. Sinon tu peux écrire directement en openxml pour le format xlxs https://codes-sources.commentcamarche.net/source/102062-excel-avec-openxml

    Pour les bases de données, il y a des exemples sur le site
    https://codes-sources.commentcamarche.net/source/list/c-net-13/last

    0
    1. Stapled Messages postés 34 Statut Membre
       
      Bonsoir,

      Je suis conscient que les fichiers ini sont désuets mais j'aimerai quand même savoir comment afficher certaines données enregistrées dans un fichier ini dans une listview.
      0
    2. Utilisateur anonyme
       
      De la même façon que n’importe quel fichier texte.
      Mais pour te montrer, il faudrait un exemple de ton fichier
      0
    3. Stapled Messages postés 34 Statut Membre
       
      Oui bien sûr :

      (c'est du jeu de rôle)
      0
    4. Utilisateur anonyme
       
      T’aurais pu copier coller le texte, ça m’aurait évité de devoir le retaper de mon côté
      0
    5. Stapled Messages postés 34 Statut Membre
       
      Désolé
      0
  2. Utilisateur anonyme
     
    Avec ce fichier
    [Personnage]
    Nom=Organ
    Prenom=Stapled
    Race=Humain
    Age=42
    Description=
    Arme=
    Classe=Sorcier
    Male=Femelle
    Femme=Male
    Autre=Autre
    [Personnage]
    Nom=Toto
    Prenom=Tata
    Race=Elfe
    Age=275
    Description=Très beau
    Arme=Epée
    Classe=Guerrier
    Male=Male
    Femme=Femelle
    Autre=N'importe quoi


    Je ne sais pas comment tu as écrit ta classe Personnage alors j'ai fait un truc bateau, y'a un int et un enum pour l'exemple

        class PersonnageStapled
        {
            public string Nom { get; set; }
    
            public string Prenom { get; set; }
    
            public string Race { get; set; }
    
            public int Age { get; set; }
    
            public string Description { get; set; }
    
            public string Arme { get; set; }
    
            public Classe Classe { get; set; }
    
            public string Sexe { get; set; }
    
            public string Conjoint { get; set; }
    
            public string Autre { get; set; }
    
    
            public override string ToString()
            {
                return string.Format("Je m'appelle {0} {1}", Nom, Prenom);
            }
    
            public static List<PersonnageStapled> LireIni(string FileName)
            {
                List<PersonnageStapled> lesPersos = new List<PersonnageStapled>();
    
                //J'utilise une méthode pas forcément optimisée mais accessible pour un débutant
                string toutLeTexte = File.ReadAllText(FileName);//je charge tout le fichier
                string[] persos = toutLeTexte.Split(new[] { "[Personnage]\r\n" },StringSplitOptions.RemoveEmptyEntries);//je découpe le texte par le mot clé personnage
    
                foreach(string perso in persos)//j'itère chaque personnage
                {
                    string[] lesLignes = perso.Split(new[] { "\r\n" }, StringSplitOptions.None);//je découpe par ligne
    
                    //je pars du principe que le fichier est toujours parfaitement bien formaté (c'est l'un des inconvenients de ce format...)
                    PersonnageStapled nouveauPerso = new PersonnageStapled();
                    nouveauPerso.Nom = lesLignes[0].Split('=')[1];//je découpe par le = et je prends le 2eme
                    nouveauPerso.Prenom = lesLignes[1].Split('=')[1];
                    nouveauPerso.Race = lesLignes[2].Split('=')[1];
                    nouveauPerso.Age = Convert.ToInt32(lesLignes[3].Split('=')[1]);//il faut convertir en int
                    nouveauPerso.Description = lesLignes[4].Split('=')[1];
                    nouveauPerso.Arme = lesLignes[5].Split('=')[1];
                    nouveauPerso.Classe = (Classe)Enum.Parse(typeof(Classe), lesLignes[6].Split('=')[1]);//il faut convertir en Classe
                    nouveauPerso.Sexe = lesLignes[7].Split('=')[1];
                    nouveauPerso.Conjoint = lesLignes[8].Split('=')[1];
                    nouveauPerso.Autre = lesLignes[9].Split('=')[1];
    
                    lesPersos.Add(nouveauPerso);
                }
    
                return lesPersos;
            }
        }
    
        enum Classe
        {
            Sorcier,
            Guerrier
        }


    Et dans le formulaire, pour afficher sur une listBox
    listBox1.DataSource = PersonnageStapled.LireIni("test.ini");

    0
    1. Stapled Messages postés 34 Statut Membre
       
      Bonjour,

      Désolé pour avoir tardé à répondre. Je vous remercie pour votre aide, je vais essayer de faire fonctionner ce code avec mon application.

      Mon fichier ini a été construit de cette manière :

      private void button1_Click(object sender, EventArgs e)
              {
                  textBox1.Text = textBox1.Text;
                  comboBoxclasse.Items.Add(comboBoxclasse.Text);
      
                  int N_ident;// n° du fichier
      
      
                  do
                  {
                      N_ident = (new Random()).Next(0, 9999999);
      
                  }
                  while (File.Exists(Application.StartupPath + @"\personnage\" + N_ident.ToString() + ".ini"));
                  Ini Data = new Ini(Application.StartupPath + @"\personnage\" + N_ident.ToString() + ".ini");
      
                  Data.Write("Personnage", "Nom", textBox1.Text);
                  Data.Write("Personnage", "Prenom", textBox2.Text);
                  Data.Write("Personnage", "Race", textBox4.Text);
                  Data.Write("Personnage", "Age", textBox3.Text);
                  Data.Write("Personnage", "Description", textBox5.Text);
                  Data.Write("Personnage", "Arme", comboBox2.Text);
                  Data.Write("Personnage", "Classe", comboBoxclasse.Text);
                  Data.Write("Personnage", "Male", radioButton1.Text);
                  Data.Write("Personnage", "Femme", radioButton2.Text);
                  Data.Write("Personnage", "Autre", radioButton3.Text);
                
      
      
                  Close();
      
              }
      
      0
    2. Utilisateur anonyme
       
      C’est quoi ce do?
      Pour trouver le premier nombre disponible?
      0
    3. Stapled Messages postés 34 Statut Membre
       
      Oui c'est ça
      0
    4. Utilisateur anonyme
       
      et ta classe ini elle sort d'ou?
      0
    5. Stapled Messages postés 34 Statut Membre
       
      Elle provient d'une autre page .cs intitulée IniParser.cs
      Elle est lié à l'autre page avec un using.
      0