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 :

Problème chargement infos liste


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut Problème chargement infos liste
    Bonjour,

    J'ai un problème sous GTK et je n'arrive pas à le résoudre...
    Je voudrais charger des données d'un fichier texte et les mettre dans une liste. Cependant il y des restrictions.

    Voici le fichier texte :
    Info/Nom_de_l'information,Info/Nom_de_l'information/Info/Nom_de_l'information3

    Ce que je voudrais, c'est charger seulement le nom de l'information et la mettre dans une liste. Voilà mon bout de code :

    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
                char *Info;
                char Lettre;
                fp_info=fopen("informations.txt","r");
     
                if (fp_info == NULL){
                       perror("Erreur");
                       exit(0);
                       }
     
                while (!feof(fp_info)) {
     
                       Categ = (char *) calloc(1,sizeof(char));
                       k=1;      
                       while (strcmp(Lettre,"/") != 0){
                             Lettre = (char)fgetc(fp_info);
                             strcat(Info,&Lettre);
                             k++;
                             Info = (char *) realloc(Info, k*sizeof(char));
                             }
     
     
                       if (strncmp(Info,"Info/",5) == 0){
                             list = g_list_append(list, g_strdup_printf("%s",&Info));
                             }
                free(Info);                   
                       }
                fclose(fp_info);
    Voilà, ça ne marche pas :'( J'aurais besoin de vos lumières.
    Merci d'avance.

  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 : 47
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut et bienvenue sur les forums de developpez.com


    Moi je te propose une solution un peu plus simple ... enfin j'ai fait suivant les infos que j'avais donc adapte au besoin:
    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
       fp_info = fopen ("informations.txt", "r");
     
       if (fp_info != NULL)
       {
          /* Recherche du nom de l'information: */
          tok = strtok (str, "/");
          tok = strtok (NULL, ",");
     
     
          /* Allocation d'une chaine et ajout du pointeur dans la liste: */
          {
             char * Info = malloc (strlen (tok) + 1);
     
             if (tmp != NULL)
             {
                strcpy (Info, tok);
                list = g_list_append (list, g_strdup_printf ("%s", Info));
             }
          }
     
          fclose (fp_info);
       }
    Voilà, si tu as des questions hésite pas, nous sommes là pour ca
    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 chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    Salut,

    Il existe aussi g_strsplit() ... Un des avantages de la glib sur la libc est de fournir quantité de fonctions super-pratiques qui raccourcissent le code.

    http://developer.gnome.org/doc/API/2...tml#g-strsplit

  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 : 47
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Lunixinclar
    Salut,

    Il existe aussi g_strsplit() ... Un des avantages de la glib sur la libc est de fournir quantité de fonctions super-pratiques qui raccourcissent le code.

    http://developer.gnome.org/doc/API/2...tml#g-strsplit
    Effectivement, j'oublie tout le temps cette lib, l'habitude de faire les choses moi même, ce qui reste tout de même un bon exercice
    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 chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    C'est vrai Franck.
    En C pur sans strcmp(), ni glib, ni rien ... ça aurait pu inspirer ceci:
    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
    #include <stdio.h>
     
    #define print mot[b]=0; printf("info%s : [%s]\n", (flag)?"rmation":"",mot); b=0;
     
    int main()
    {
      char *s = "Info1/information1/Info2/information2/Info3/Nom_de_l'information3";
      char mot[255];
      unsigned char b=0, flag=0;
     
      while (*s)
      {
       if (s[0]=='/')
       {
         print
         flag =! flag;
       }
       else mot[b++]=s[0];
       s++;
      }
     
      print
     
      return 0;
    }
    lol.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Bonjour,

    Tout d'abord merci pour vos réponses ! C'est vraiment sympa de prendre de votre temps.

    Alors en ce qui concerne la réponse de Lunixinclar, je n'ai pas que 3 informations, j'en ai beacoup qui sont rangées dans un fichier texte. Donc si j'ai bien compris, il faut d'abord faire une boucle qui a pour but de récupérer tout ce que contient le fichier texte et les mettre dans une variable *char ?

    J'ai essayé la méthode de Franck, mais étant novice en C, je n'ai pas tout compris et j'ai quelques petites questions :
    - Je ne vois pas ce que c'est que tmp, comment peut on dire :
    alors qu'on l'a jamais initialisée.
    - Je ne vois pas à quoi servent ces accolades :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          {<<<<<<------- CELLE LA
             char * Info = malloc (strlen (tok) + 1);
     
             if (tmp != NULL)
             {
                strcpy (Info, tok);
                list = g_list_append (list, g_strdup_printf ("%s", Info));
             }
          } <<<<<<------- CELLE LA
    Sinon je pense avoir compris la méthode en gros avec le strtok, je vais essayer...
    Merci beacoup pour votre aide.

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

Discussions similaires

  1. [AC-2007] Problème chargement infos dans formulaire
    Par borisp dans le forum VBA Access
    Réponses: 7
    Dernier message: 27/10/2011, 13h54
  2. [STL]Problème itérateur avec list
    Par Fiquet dans le forum SL & STL
    Réponses: 7
    Dernier message: 03/10/2005, 17h54
  3. [INFO] Liste des produits Oracle
    Par orafrance dans le forum SQL
    Réponses: 2
    Dernier message: 01/08/2005, 21h42
  4. [Forms] chargement de liste impossible
    Par bargou dans le forum Forms
    Réponses: 17
    Dernier message: 15/02/2005, 09h04

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