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 :

GList d'un fichier texte


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 1
    Par défaut GList d'un fichier texte
    Bonjour,

    Je suis nouveau à GTK+, j'ai une question qui pourrait paraître trivial mais j'aimerais être certain de faire le tout correctement. J'ai un fichier texte formaté comme suit:
    Mot1 avec espace
    Mot2 avec espace
    Mot3 avec espace
    ...
    J'aimerais mettre chaque ligne dans une list Glist pour mettre cette liste par la suite dans un combo box.
    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
     
    gchar *buffer;
    gsize lenght = 0;
    GList *list = NULL;
    GError *error = NULL;
     
    if(g_file_get_contents("test.txt", &buffer, &lenght, &error) == FALSE){
    g_warning("%s", error->message);
    g_clear_error(&error);
    }
     
    list = g_list_append(list, buffer); //??? Comment faire pour ne passer qu'une seule ligne plutôt que le buffer en entier, utilisant les fonctions de GTK+
     
    g_free(buffer);
    return list;
    Y a-t-il une fonction GTK pour faire ce que je veux?

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Salut.

    Tout d'abord lorsque tu sauves un pointeur dans une glist il ne faut pas derrière libérer ce même pointeur. Plus généralement l'ajout d'un pointeur dans une Glist ne provoque pas la copie de son contenu.

    Ensuite, pour extraire des données texte d'un buffer tu as tout un panel de fonctions dans la glib.

  3. #3
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Tu as le choix, il y a plusieurs possibilités.
    1. Tu peux lire le fichier ligne par ligne, et conserver chacune dans ta liste
    2. Tu peux lire tout le fichier, et ensuite le découper en lignes.

    Pour la méthode 1, tu peux utiliser g_io_channel_new_file + g_io_channel_read_line, mais je trouve ça un peu compliqué.
    Je préfère la méthode 2 avec g_file_get_contents et g_strsplit, qui te créera un vecteur de chaines de caractères, à libérer ensuite avec g_strfreev. Il te suffit alors de renvoyer ce vecteur (c'est un tableau de pointeurs), plus besoin d'utiliser des listes.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    J'aime bien aussi la méthode 2. L'inconvénient est l'espace mémoire utilisé. Tout le fichier est chargé avant traitement. tout dépend donc de la taille de ce fichier.
    S'il est trop volumineux, une lecture séquentielle avec fgets(); par exemple évite le problème.

  5. #5
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Effectivement, fgets est plus simple pour la méthode 1. Ma méthode 2 était celle pour les fainéants qui ne veulent pas boucler sur chaque ligne du fichier et juste avoir un seul code retour à vérifier .

    Mais dans le cas de la méthode 1 avec fgets, il faut revenir sur une GList (ou une GSList). Dans ce cas on gère bien les gros fichiers sauf... quand on utilise (comme l'a fait dsp_redux) g_list_append pour stocker les lignes lues. La liste est parcourue entièrement pour ajouter le dernier élément, ce qui est atroce au niveau performances car pour ajouter n éléments, on a besoin de !n (factorielle n) opérations. Il faut alors utilise l'astuce suivante : ajouter tous les éléments au début de la liste avec g_list_prepend (n opérations pour ajouter n éléments - effet de bord : cela inverse leur ordre), puis une fois tous les éléments dans la liste, la retourner avec g_list_reverse pour qu'ils retrouvent leur ordre initial. Cette astuce se trouve d'ailleurs dans la documentation de g_list_append.

Discussions similaires

  1. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57
  2. Réponses: 1
    Dernier message: 12/02/2003, 09h36
  3. [VB6] Ecrire/Modifier/Effacer ds un fichier text-4 Chs/Lg
    Par Jonathan_Korvitch dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 24/12/2002, 18h54
  4. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 13h56
  5. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17

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