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

GTK+ avec C & C++ Discussion :

Chargement d'un combobox à partir d'un fichier text


Sujet :

GTK+ avec C & C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Points : 20
    Points
    20
    Par défaut Chargement d'un combobox à partir d'un fichier text
    Bonsoir,
    Je dois programmer le chargement d'un combobox grâce à un fichier text et je ne sais pas du tout comment m'y prendre.
    J suis toute debutante en gtk + et j'ai essaye de chercher sur des forums des renseignement sur les combobox mais ya pas grand chose...
    En gros, mon fichier text doit contenir un info par ligne qui seront chargees dans la combobox.
    Est ce que qqun pourrait m'aider svp... J'ai simplement declare et cree ma combobox pour l'instant..

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par claire_cartier
    Bonsoir,
    Je dois programmer le chargement d'un combobox grâce à un fichier text et je ne sais pas du tout comment m'y prendre.
    J suis toute debutante en gtk + et j'ai essaye de chercher sur des forums des renseignement sur les combobox mais ya pas grand chose...
    En gros, mon fichier text doit contenir un info par ligne qui seront chargees dans la combobox.
    Est ce que qqun pourrait m'aider svp... J'ai simplement declare et cree ma combobox pour l'instant..
    Salut et bienvenue sur les forums de developpez.com


    Pour toi, rien de bien compliqué, en fait les vraies informations se trouvent essentiellement dans la ref de l'API GTK+ http://www.gtk.org/api/ il faut juste savoir où chercher c'est tout mais ca s'apprend !

    Pour commencer, tu peux créer ton ComboBox (je suppose que c'est celui que tu veux) de type GtkComboBox avec la fonction gtk_combo_box_new_text .

    Viens ensuite la lecture du fichier ligne pas ligne on va passer par le biais des fonctions de la GLib qui sont plus ou moins identiques que celles standard au C ANSI/ISO mais avec en plus des gestions d'erreur ! Ces fonctions que tu vas utiliser se trouvent dans la ref de l'API de GTK+ dans la partie GLIB puis IO Channels !

    Pour ouvrir un fichier, tu peux utiliser la fonction g_io_channel_new_file puis dans une boucle, tu lis ensuite ligne par ligne avec la fonction g_io_channel_read_line ! Un exemple de lecture ligne par ligne d'un fichier:

    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
    #include <string.h>
    #include <glib.h>
    #include <glib/gprintf.h>
     
     
    int main (void)
    {
       GIOChannel  * p_file = NULL;
       GError      * p_err  = NULL;
       gchar       * p_buf  = NULL;
     
     
       p_file = g_io_channel_new_file ("données.txt", "r", & p_err);
     
       if (p_file != NULL)
       {
          p_buf = g_malloc (20);  /* Taille de buffer suffisante. */
     
          if (p_buf != NULL)
          {
             /* Lecture ligne par ligne. */
             while (g_io_channel_read_line (p_file, & p_buf, NULL, NULL, NULL) ==
                      G_IO_STATUS_NORMAL)
             {
                /*
                 * Il faut enlever le \n qui se trouve a la fin de la chaine et
                 * le remplacer par un zero de fin de chaine soit \0.
                 */
                gchar * p = strchr (p_buf, '\n');
     
                if (p != NULL)
                {
                   *p = 0;
                }
     
                g_printf ("%s\n", p_buf);
             }
          }
       }
       else
       {
          /* Erreur d'ouverture du fichier. */
          g_printf ("%s\n", p_err->message);
          g_error_free (p_err);
       }
     
     
       return 0;
    }
    La seule différence avec toi, c'est que toi tu vas devoir insérer chaque ligne lue dans ton GtkComboBox donc tu peux le faire avec la fonction gtk_combo_box_append_text


    Voilà, j'espère que j'ai bien répondu à ta question
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Je suis desolee mais ca ne marche pas..
    Dans la procedure que tu m'a ecrite, je l'ai un pe modifier pour charger une donnee par ligne de mon fichier text dans un combobox:
    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
     /*Chargement de la combobox*/
       GIOChannel  * p_file = NULL;
       GError      * p_err  = NULL;
       gchar       * p_buf  = NULL;
       p_file = g_io_channel_new_file ("memocat.txt", "r", & p_err);
       if (p_file != NULL)
       {
          p_buf = g_malloc (20);  /* Taille de buffer suffisante. */
          if (p_buf != NULL)
          {
             /* Lecture ligne par ligne. */
             while (g_io_channel_read_line (p_file, & p_buf, NULL, NULL, NULL) ==
                      G_IO_STATUS_NORMAL)
             {
                /*
                 * Il faut enlever le \n qui se trouve a la fin de la chaine et
                 * le remplacer par un zero de fin de chaine soit \0.
                 */
               // gchar * p = strchr (p_buf, '\n');
               // if (p != NULL)
               // {
               //    *p = 0;
               // }
               /*Chargement de la ligne du fichier text p_buf dans le combo box pCombo_cat*/
                gtk_combo_box_append_text (pCombo_cat, &p_buf); 
                   g_printf ("%s\n", p_buf);
             }
          }
       }
       else
       {
          /* Erreur d'ouverture du fichier. */
          g_printf ("%s\n", p_err->message);
          g_error_free (p_err);
       }
    Le truc c'est que en gro il m'affiche un signe dans chaque ligne de ma combo mais qui ressemble à des carres ou a @.!
    J'ai peut etre mal passe mes variables...Je ne sais pas du tout
    Tu pourrais me dire ke t'en penses?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    En fait ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_combo_box_append_text (pCombo_cat, &p_buf);
    Tu peux enlever le caractères que je t'ai mis en rouge car il faut simplement passer le pointeur sur la chaîne non pas son adresse !

    Et, pourquoi avoir enlevé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
               // gchar * p = strchr (p_buf, '\n');
               // if (p != NULL)
               // {
               //    *p = 0;
               // }
    C'est pas pour faire joli que je l'ai mis mais étant donné que tu lis un fichier, chaque saut de ligne est pris en compte et ajouté dans la chaîne d'où le fait de supprimer ce caractère sinon dans ta liste du GtkComboBox, tu aura un espace entre chaque élément !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Merci merci milles fois!
    Ca marrche!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Bonsoir,
    Apres qq modifications je n'arrive plus à faire marcher ma procedure.
    Pourriz vous me dire ski cloche si vous le voyeiz, moi ca fait 2h ke je suis dessus et jen pe plus
    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
    /*création de la comboBox*/
      pCombo_cat = gtk_combo_box_new_text ();
     
      /*Chargement de la combobox*/
       GIOChannel  * p_file = NULL;
       GError      * p_err  = NULL;
       gchar       * p_buf  = NULL;
       p_file = g_io_channel_new_file ("memocat.txt", "r", & p_err);
       if (p_file != NULL)
       {
          p_buf = g_malloc (20);  /* Taille de buffer suffisante. */
          if (p_buf != NULL)
          {
             /* Lecture ligne par ligne. */
             while (g_io_channel_read_line (p_file,  & p_buf, NULL, NULL, NULL) ==
                      G_IO_STATUS_NORMAL)
             {
                /*
                 * Il faut enlever le \n qui se trouve a la fin de la chaine et
                 * le remplacer par un zero de fin de chaine soit \0.
                 */
                gchar * p = strchr (p_buf, '\n');
                if (p != NULL)
                {
                   *p = 0;
                }
               /*Chargement de la ligne du fichier text p_buf dans le combo box pCombo_cat*/
                gtk_combo_box_append_text (pCombo_cat, p_buf); 
                g_printf ("%s\n", p_buf);
             }
          }
       }
       else
       {
          /* Erreur d'ouverture du fichier. */
          g_printf ("%s\n", p_err->message);
          g_error_free (p_err);
       }
    En gro il me trouve une erreur sur cette phrase :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_combo_box_append_text (pCombo_cat, p_buf);
    Il me dit kil y ba une erreur de parametre :
    104 [Warning] passing arg 1 of `gtk_combo_box_append_text' from incompatible pointer type

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    C bon en fait j'ai resolu mopn prbleme
    Il fallait remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_combo_box_append_text (GTK_COMBO_BOX(pCombo_cat), p_buf);

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par claire_cartier
    C bon en fait j'ai resolu mopn prbleme
    Il fallait remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_combo_box_append_text (GTK_COMBO_BOX(pCombo_cat), p_buf);
    Attention, un warning n'est pas une erreur, une erreur c'est soit un plantage du programme avec un code d'erreur spécifique à la sortie ou bien une erreur de compilation.

    Pour ce genre de warning, ca te fera penser que si tu as un widget quelconque dans sous un pointeur de type GtkWidget, il faut toujours utiliser dans les fonctions de traitement la macro de transtypage adéquate au type réel du widget !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

Discussions similaires

  1. Remplir combobox à partir d'un fichier texte
    Par MdSonper dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/02/2015, 15h01
  2. remplir une combobox à partir d'un fichier .csv
    Par wolverine1987 dans le forum MFC
    Réponses: 24
    Dernier message: 28/04/2009, 11h00
  3. Chargement d'une table à partir d'un fichier texte
    Par Trebor_ dans le forum Débuter
    Réponses: 2
    Dernier message: 21/02/2008, 14h31
  4. chargement d'un combobox à partir d'une table access
    Par sarah_s dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/05/2007, 17h19
  5. chargement d'un combobox à partir d'un fichier text
    Par claire_cartier dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 09/04/2007, 14h45

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