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 :

lire un fichier texte


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut lire un fichier texte
    bonsoir,
    j'ai juste un peutit probleme avec mon code en C.
    j'arrive a lire une fichier txt ligne par ligne OK
    dans le fichier txt ex: le contenu est : 12 nom adresse
    je n'arrive pas mettre chaque mots dans une variable, vue que les mots sont separer par tabulation.

    fscanf (fich, "%[^]%[^]%[^]", &tab[i][j], &tab [j][j+1], &tab [k][j+2]);

    sur chauqe tab il copier tout. !!
    merci pour ton aide

  2. #2
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par Sami_lucas
    bonsoir,
    j'ai juste un peutit probleme avec mon code en C.
    j'arrive a lire une fichier txt ligne par ligne OK
    dans le fichier txt ex: le contenu est : 12 nom adresse
    je n'arrive pas mettre chaque mots dans une variable, vue que les mots sont separer par tabulation.

    fscanf (fich, "%[^]%[^]%[^]", &tab[i][j], &tab [j][j+1], &tab [k][j+2]);

    sur chauqe tab il copier tout. !!
    merci pour ton aide
    C'est quoi ce formatage bizarre ?
    '%s' suffit pour des champs séparés par un caractère blanc (type espace, tabulation, ...)
    Il faut de plus faire attention a la taille des chaînes de caratères. Vérifier le retour de la fonction.
    Et quand je vois des '&' devant les variables, je crains le pire....
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    ok pour le formatage, je le met avec %s et l'enleve le'&' mais le n'arrive pas a voir ci il copier juste le premier mots dans la table1 , 2ème a la tab2 et 3è a tab3.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    scanf("%s") est un bug.

    À moins d'être un expert de scanf(), je conseillerais de lire ligne par ligne et d'analyser ensuite...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par Médinoc
    scanf("%s") est un bug.

    À moins d'être un expert de scanf(), je conseillerais de lire ligne par ligne et d'analyser ensuite...
    Il aura les mêmes problèmes en analysant ensuite les champs, dont il ne connaîtra pas la taille.
    L'interet pour lui d'utiliser fgets est qu'il peut avoir moins de problèmes à gerer les '\n' dans le fichier (enfin sauf si les champs sont plus longs que la taille qu'il peut estimer pour une ligne....). Mais il faudra quand meme faire attention aux tailles des buffers avec sscanf.
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    ça ne marche pas avec %s
    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (!feof (fich))
    {
       fscanf (fich, "%s %s %s", tab [i], tab [j], tab [k] );
       printf("%s\n", tab[i]);	     	  
       j++;
       i++;
       k++;
    }
    donc si je veux qui affiche la contenu du tab [i] il imprime la dernier mot.

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Sami_lucas
    ça ne marche pas avec %s
    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (!feof (fich))
    {
       fscanf (fich, "%s %s %s", tab [i], tab [j], tab [k] );
       printf("%s\n", tab[i]);	     	  
       j++;
       i++;
       k++;
    }
    donc si je veux qui affiche la contenu du tab [i] il imprime la dernier mot.
    Deux-trois remarques:
    * feof() ne fonctionne pas comme ca : http://c.developpez.com/faq/c/?page=...RS_fin_fichier
    * tu n'as aucune verification sur la taille des chaines de caracteres lues dans ce code. Si le mot est plus long que la taille reserve ca ne fonctionne pas correctement.
    * Tu ne verfies pas le nombre de conversion correctement effectuees par fscanf(), si il y a un probleme, tu ne le detectes donc pas.


    Pourquoi veux tu absolument utiliser fscanf() ? Une lecture ligne par ligne et une analyse "a la main" sont plus simple a mettre en place.
    En outre si tu veux une aide pertinente, il faut au moins fournir:
    * la declaraton de tab
    * la description precise du format du fichier

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/12/2005, 15h57
  2. [Applet] lire un fichier texte
    Par lebesnec dans le forum Applets
    Réponses: 2
    Dernier message: 07/07/2005, 10h09
  3. Réponses: 1
    Dernier message: 24/11/2004, 16h54
  4. [Fichier] Lire un fichier texte long
    Par _Eric_ dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 18/08/2004, 15h22
  5. Réponses: 2
    Dernier message: 26/05/2004, 17h53

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