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 :

charger un fichier dans un tableau


Sujet :

C

  1. #1
    Débutant
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Points : 35
    Points
    35
    Par défaut charger un fichier dans un tableau
    Bonjour,

    Pour allouer un tableau dynamique de chaine des caractères, on fait en général
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T = (char **) malloc(n * sizeof(*T));
    avec n est le nombre des cases du tableau T.
    Si on ne sait pas n alors comment on va allouer ce tableau ?

    par exemple je ne vais charger toutes les n lignes de fichier dans un tableau mais je voulais charger dans le tableau T certaines lignes qui vérifient certaines conditions.

    Donc comment allouer ce tableau T ?

    Merci.

  2. #2
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Citation Envoyé par siempre Voir le message
    Si on ne sait pas n alors comment on va allouer ce tableau ?
    Comment veut-tu allouer un tableau dont tu ne connais pas la taille ?

    Pour tes conditions, il suffit de lire combien de lignes vérifient cette condition et ensuite d'allouer le nombre de cases correspondant.
    Plus tu pédales moins fort, moins t'avances plus vite.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    Pour moi tu ouvres le fichier une premiere fois pour compter combien tu vas allouer, tu le refermes.
    Tu le re-ouvres pour le mettre dans ton tableau.
    Et voila

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par ugo188 Voir le message
    Pour moi tu ouvres le fichier une premiere fois pour compter combien tu vas allouer, tu le refermes.
    Tu le re-ouvres pour le mettre dans ton tableau.
    Et voila
    Pourquoi fermer et ré-ouvrir le fichier alors qu'il suffit d'utiliser rewind()?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    En effet pas besoin!
    (Je ne connaissais pas rewind )

    Donc je me voyais passe par un read (2 fois du coups!)

  6. #6
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    http://c.developpez.com/cours/bernar...ne/node132.php
    Comme rewind est dans la même section que fseek et ftell, je me demande si le fait de l'utiliser en mode texte ne provoque pas un comportement indéterminé? C'est vrai que repartir au début du fichier semble indépendant du mode (texte ou binaire).

  7. #7
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    rewind() ne pose pas de problèmes avec les fichiers texte.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il n'est peut-être pas économique de lire une première fois le fichier et tester pour chaque ligne si les conditions sont remplies afin de compter le nombre de lignes à garder, puis de recommencer à les tester afin d'éventuellement les stocker.

    Je préfèrerai procéder par réallocation :

    - Allouer n pointeurs sur char.
    - Lire les lignes. Stocker et compter les lignes satisfaisant le critère.
    - Lorsque le tableau de pointeurs est plein, réallouer de l'espace et continuer
    - Arrivé à la fin du fichier, réallouer une dernière fois en fonction du nombre de lignes obtenues pour récupérer l'excédent de mémoire allouée.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  9. #9
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par diogene Voir le message
    Il n'est peut-être pas économique de lire une première fois le fichier et tester pour chaque ligne si les conditions sont remplies afin de compter le nombre de lignes à garder, puis de recommencer à les tester afin d'éventuellement les stocker.

    Je préfèrerai procéder par réallocation :

    - Allouer n pointeurs sur char.
    - Lire les lignes. Stocker et compter les lignes satisfaisant le critère.
    - Lorsque le tableau de pointeurs est plein, réallouer de l'espace et continuer
    - Arrivé à la fin du fichier, réallouer une dernière fois en fonction du nombre de lignes obtenues pour récupérer l'excédent de mémoire allouée.
    A mon avis, c'est probablement moins efficace que de traverser deux fois le fichier.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  10. #10
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Ce n'est pas seulement lire deux fois le fichier qui est en question, c'est aussi vérifier deux fois sur chaque ligne le(s) critère(s) de sélection ou de rejet d'une ligne.
    En fait, on fait alors deux analyses du fichier pour s'épargner un nombre de réallocations du tableau de pointeurs qui peut être gardé assez faible : on n'est pas forcé de réallouer pour une seule ligne à chaque fois.
    Mais, bon ...
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Points : 23
    Points
    23
    Par défaut
    Je sais pas vraiment.

    Moi j'ai plutot appris a faire ca en lisant le fichier deux fois, ce qui en effet peut ne pas etre tres "joli".
    Mais de meme je ne trouve pas la reallocation tres "joli" non plus

    Puis apres on va dire que ca depend des tests fait et des tailles de fichiers.
    Je pense que si c'est une grosse batterie de test (ou de tres gros fichier) a chaque fois, vaudrait mieux favoriser la reallocation.
    En revanche si se ne sont pas des fichiers tres gros ou de simples tests, autant le lire deux fois.

    Mais je suis encore novice, donc j'ai peut etre tord
    (Des avis?)

  12. #12
    Débutant
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    J'ai un fichier "in.txt" où chaque contient une chaine de caractère.
    Un exemple de ce fichier:
    aa bbb
    cc dddd
    bb a
    aa
    Je voulais remplir un tableau par ce fichier c'est à dire chaque case contient une chaine de ligne de fichier
    autrement :
    case 1 contient la chaine de 1 ère ligne de fichier
    case 2 contient la chaine de 2 ème ligne de fichier
    ...
    Le nombre des lignes de fichier est nbre c'est le même que le nombre de case de tableau.

    Voici mon essai:
    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
     
    int main()
    {
    FILE *fp;
    int nbre,i,N=10;
     
    //Le nombre des combinaisons
    nbre = pow(2,N) - (N+1);
     
    fp = fopen("in.txt","r");
    //copier le contenu du fichier dans le tableau
       for(i=0; i < nbre;i++)
       {
          fgets(s, 100, fpComb);
     
    	  tab[i] = strdup(s);
     
       }
     
    fclose(fp);
    return 0;
    }

    J'ai problème: chaque case de tableau contient la chaine correspondante mais de plus le caractère '\n'.
    Je voulais la chaine seulement sans '\n'.
    Comment résoudre ce problème ?

    Merci.

  13. #13
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Il faut que tu fasses une fonction pour l'enlever
    Plus tu pédales moins fort, moins t'avances plus vite.

Discussions similaires

  1. charger des parties d'un fichier dans un tableau
    Par leila32 dans le forum C++
    Réponses: 14
    Dernier message: 08/03/2013, 13h06
  2. Charger un fichier dans un tableau de structures
    Par ysahel dans le forum Débuter
    Réponses: 7
    Dernier message: 17/01/2010, 13h18
  3. Charger un fichier dans tableau d'entier
    Par nico0007 dans le forum Langage
    Réponses: 12
    Dernier message: 17/04/2008, 11h30
  4. charger un fichier dans un tableau
    Par nico0007 dans le forum Delphi
    Réponses: 3
    Dernier message: 16/01/2007, 23h59
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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