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 :

lecture d'un fichier txt


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut lecture d'un fichier txt
    Bjr
    j'essaye de lire un fichier txt sous la forme
    **** bienvenue****
    ****liste à afichier est la suivante*****
    Nom|said
    Prenom|samir
    age|22
    adresse|xxx
    ....

    le fichier peut contenir plusieurs lignes ça depend du nombre d'information de la personne.

    je veux en c avoir ces information dans un tableau de deux dimensions pour enregistrer que les information utiles (càd à partir de 3éme ligne)
    j'ai essayé de manipuler les fonctions fgets fgetc mais ça marche pas
    merci de m aider

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Par défaut
    Bonjour,

    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
     
    #include <stdio.h>
     
    # define MAX_LEN_LINE 1024 // Tu peux augmenter si tu veux
     
    int main()
    {
        char str[MAX_LEN_LINE];
        char **tab;
        FILE *file;
        int nbLine;
     
        nbLine = 0;
        if ((file = fopen("./dossier/fichier.txt", "r")) == NULL) // Ouvre le fichier ciblé à "./dossier/fichier.txt' en mode lecture (r comme read)
               return (-1); // Le fichier ne peut pas être lu ou n'existe pas
        while ((fgets(str, MAX_LEN_LINE, file))) // Compte le nombre de lignes à enregistrer dans le tableau
        {
           if (*str != '*') // Si la ligne ne commence pas par le symbole '*'
                nbLine++;
         }
        file = freopen("./dossier/fichier.txt", "r"); // Ferme et re-ouvre le fichier afin de placer le 'curseur' de lecture du fichier au début, ainsi fgets recommence à partir du début
        if ((tab = malloc(nbLine)) == NULL)
             return (1); // Si la mémoire demandée n'a pas pu être allouée
        nbLine = 0;
        while ((fgets(str, MAX_LEN_LINE, file))) // On recommence la boucle pour relire les lignes du fichier
        {
            if ((tab[nbLine] = strdup(str)) == NULL) // Copie la ligne dans tab
                 return (-1); // Si la mémoire demandée n'a pas pu être allouée
            nbLine++;
        }
        fclose(file);
        return (0);
    }
    Je n'ai pas vérifier ce code, car je l'ai tapé directement dans le post mais je pense que ça devrait être bon. Si un point te semble obscure, n'hésite pas.
    A propos de fgets :
    Vérifie que tu as bien mis '#include <stdio.h>' et que tu as bien ouvert avec fopen(). Le prototype de fgets est => char *fgets (char *s, int size, FILE *stream);
    *s est une chaîne de caractère déjà allouée.
    size est le nombre de caractère lu au maximum. Cela évite des segmentations faults en écrivant dans s (si s[10] et que ta ligne fait 20 caractères, tu segfaulteras).
    FILE *stream est une variable particulière à utiliser avec les autres fonctions de même type comme fopen, fclose, fread, fwrite, fgets, fgetc etc.

  3. #3
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut lecture d'un fichier txt
    Merci bien mr hoder

    sinon votre programme ne veut pas être compiler
    c'est pour cela j'ai modifier file = freopen("./dossier/fichier.txt", "r"); // par fopen et maintenant ça marche.

    sinon pour afficher le tableau qui contient les ligne du fichier j'ai ajouter les lignes suivante a la fin de votre programme:
    for (i = 0; i< nbLine; i++)
    printf(" les lignes sont:\n", tab[i]);

    je pense que le tab[0] va contenir toute la ligne c'est a dire Nom|said
    moi j'ai besoin d'un tableau de deux dimensions
    par exemple tab[i][j] pour i=0 tab[i] = Nom
    et pour j=0 tab[j] = said


    merci bien pour vos effort



    Citation Envoyé par Hoder Voir le message
    Bonjour,

    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
     
    #include <stdio.h>
     
    # define MAX_LEN_LINE 1024 // Tu peux augmenter si tu veux
     
    int main()
    {
        char str[MAX_LEN_LINE];
        char **tab;
        FILE *file;
        int nbLine;
     
        nbLine = 0;
        if ((file = fopen("./dossier/fichier.txt", "r")) == NULL) // Ouvre le fichier ciblé à "./dossier/fichier.txt' en mode lecture (r comme read)
               return (-1); // Le fichier ne peut pas être lu ou n'existe pas
        while ((fgets(str, MAX_LEN_LINE, file))) // Compte le nombre de lignes à enregistrer dans le tableau
        {
           if (*str != '*') // Si la ligne ne commence pas par le symbole '*'
                nbLine++;
         }
        file = freopen("./dossier/fichier.txt", "r"); // Ferme et re-ouvre le fichier afin de placer le 'curseur' de lecture du fichier au début, ainsi fgets recommence à partir du début
        if ((tab = malloc(nbLine)) == NULL)
             return (1); // Si la mémoire demandée n'a pas pu être allouée
        nbLine = 0;
        while ((fgets(str, MAX_LEN_LINE, file))) // On recommence la boucle pour relire les lignes du fichier
        {
            if ((tab[nbLine] = strdup(str)) == NULL) // Copie la ligne dans tab
                 return (-1); // Si la mémoire demandée n'a pas pu être allouée
            nbLine++;
        }
        fclose(file);
        return (0);
    }
    Je n'ai pas vérifier ce code, car je l'ai tapé directement dans le post mais je pense que ça devrait être bon. Si un point te semble obscure, n'hésite pas.
    A propos de fgets :
    Vérifie que tu as bien mis '#include <stdio.h>' et que tu as bien ouvert avec fopen(). Le prototype de fgets est => char *fgets (char *s, int size, FILE *stream);
    *s est une chaîne de caractère déjà allouée.
    size est le nombre de caractère lu au maximum. Cela évite des segmentations faults en écrivant dans s (si s[10] et que ta ligne fait 20 caractères, tu segfaulteras).
    FILE *stream est une variable particulière à utiliser avec les autres fonctions de même type comme fopen, fclose, fread, fwrite, fgets, fgetc etc.

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Par défaut
    c'est pour cela j'ai modifier file = freopen("./dossier/fichier.txt", "r"); // par fopen et maintenant ça marche.
    Oui, je suis allé un petit trop vite en effet, c'était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file = freopen("./dossier/fichier.txt", "r", file);
    par exemple tab[i][j] pour i=0 tab[i] = Nom
    et pour j=0 tab[j] = said
    Euh, j'ai pas bien compris là :s Tu n'aurais pas fait une erreur dans ta phrase ?
    tab[i] ou tab[j] dans les deux cas, c'est *tab.
    Peut-être veux-tu faire un tableau à trois dimensions type :
    char *tab[ligne][numeroInfo]
    Qui donnerait :
    tab[0][0] = "Nom"
    tab[0][1] = "said"
    tab[1][0] = "Prenom"
    tab[1][1] = "samir"
    ?

  5. #5
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut
    d'accord je pense que j'ai pas bien expliqué ce que je veux faire.
    mon tableau doit contenir
    chaque information utile dans une case du tableau (nom prenom age said samir adress..) pour apres je pourais faire des manipulations sur c'est données par exemple chercher si j ai un nom qui commense par 's' ou bien chercher si il ya un parametre age et voir si la valeurs correspondante >20
    comme si j'ai le tableau suivant

    Nom said
    Prenom Samir
    Age 22
    Nom fayiz

  6. #6
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut
    d'une autre façon

    si j 'ai le fichier

    ali : 24
    soufiane : 26
    said : 22
    amine : 25

    je veux enregister chaque nom avec son age correspondante
    apres cette operation l'utilisateur du programme va ecrire un nom et le programme va affichier l'age correspondante (si il la trouve sinon il va afficher que ce nom n'existe pas)

    j'espere que cette exemple va eclairssir ce que je veux faire.

Discussions similaires

  1. lecture d'un fichier txt ligne par ligne
    Par SoBaKa dans le forum Général Python
    Réponses: 4
    Dernier message: 06/03/2007, 12h02
  2. Lecture depuis un fichiers txt
    Par mask91 dans le forum C++
    Réponses: 15
    Dernier message: 04/03/2007, 22h40
  3. Réponses: 4
    Dernier message: 13/11/2006, 22h30
  4. Lecture et ecriture fichier txt
    Par jeanmy dans le forum Delphi
    Réponses: 12
    Dernier message: 07/08/2006, 17h23
  5. [debutant] lecture d'un fichier txt de 10mo
    Par karamazov994 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 19/04/2005, 15h55

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