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 :

Fichier _ chaine _ structure


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut Fichier, chaine, structure
    Bonjour

    Voila j'ai un probleme

    J'ai stocker dans un fichier , des chaine de caracteres sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom;age;numero_de_tel\n
    Je souhaite maintenant recuperer ces chaines, et les transformer une a une afin de stocker le nom , l'age et le num' de chacune d'elle dans une structure avant de l'afficher.

    Je vois comment recuperer une chaine avec un fgets mais apres je bloque

    Merci d'avance à tous ceux qui m'eclaireront

  2. #2
    scr
    scr est déconnecté
    Membre éprouvé
    Inscrit en
    Juin 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 127
    Par défaut
    tu peux utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sscanf(s,"%s;%s;%s",nom,age,numero_tel);

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    le s que t'a mis dans le sscanf , c'est le nom du fichier ?
    Là ca fait pour une chaine ....

    Petite Precision :
    Tu as vu qu'a la fin de la chaine il ya "\n" afin de stocker une chaine par ligne dans le fichier

  4. #4
    scr
    scr est déconnecté
    Membre éprouvé
    Inscrit en
    Juin 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 127
    Par défaut
    Utilise fgets pour lire une seule ligne dans ton fichier.
    "s" est la chaine de caractère lue dans le fichier.

  5. #5
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par scr Voir le message
    tu peux utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sscanf(s,"%s;%s;%s",nom,age,numero_tel);
    ne marche pas !!!! Le format %s correspond à une chaine de caractères non blancs, donc rien ne l'interdit de prendre le ;

    voici comment faire
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
        char ligne[]="nom prenom;100;01 02 03 04 05";
        char nom[50], age[50], numtel[50];
     
        if ( sscanf(ligne,"%[^;];%[^;];%[^;]",nom,age,numtel) == 3 ) {
            printf("nom=\"%s\"\n",nom);
            printf("age=\"%s\"\n",age);
            printf("tel=\"%s\"\n",numtel);
        } else {
             printf("erreur\n");
        }
     
        return 0;
    }

  6. #6
    scr
    scr est déconnecté
    Membre éprouvé
    Inscrit en
    Juin 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 127
    Par défaut
    Citation Envoyé par corentin59 Voir le message
    ne marche pas !!!! Le format %s correspond à une chaine de caractères non blancs, donc rien ne l'interdit de prendre le ;

    voici comment faire
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
        char ligne[]="nom prenom;100;01 02 03 04 05";
        char nom[50], age[50], numtel[50];
     
        if ( sscanf(ligne,"%[^;];%[^;];%[^;]",nom,age,numtel) == 3 ) {
            printf("nom=\"%s\"\n",nom);
            printf("age=\"%s\"\n",age);
            printf("tel=\"%s\"\n",numtel);
        } else {
             printf("erreur\n");
        }
     
        return 0;
    }

    Oui autant pour moi vous avez raison.
    Je ne connaissait pas cette syntaxe %[^;] pourrais tu m'en décrire la signification ?

  7. #7
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par scr Voir le message
    Oui autant pour moi vous avez raison.
    Je ne connaissait pas cette syntaxe %[^;] pourrais tu m'en décrire la signification ?
    prend tous les caractères sauf le ;

    D'une manière générale, les crochets [] servent à définir un ensemble de caractères acceptables et si on commence par ^, alors c'est un ensemble de caractères non-acceptables.

  8. #8
    scr
    scr est déconnecté
    Membre éprouvé
    Inscrit en
    Juin 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 127
    Par défaut
    Citation Envoyé par corentin59 Voir le message
    prend tous les caractères sauf le ;

    D'une manière générale, les crochets [] servent à définir un ensemble de caractères acceptables et si on commence par ^, alors c'est un ensemble de caractères non-acceptables.
    Merci pour cette précision

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Citation Envoyé par corentin59 Voir le message
    ne marche pas !!!! Le format %s correspond à une chaine de caractères non blancs, donc rien ne l'interdit de prendre le ;

    voici comment faire
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
        char ligne[]="nom prenom;100;01 02 03 04 05";
        char nom[50], age[50], numtel[50];
     
        if ( sscanf(ligne,"%[^;];%[^;];%[^;]",nom,age,numtel) == 3 ) {
            printf("nom=\"%s\"\n",nom);
            printf("age=\"%s\"\n",age);
            printf("tel=\"%s\"\n",numtel);
        } else {
             printf("erreur\n");
        }
     
        return 0;
    }
    pourquoi tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( sscanf(ligne,"%[^;];%[^;];%[^;]",nom,age,numtel) == 3 )
    je n'ais pas compri cette syntaxe.
    donc la ca n'affiche que la premiere ligne ou saisie de mon fichier non ?

  10. #10
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Tu commences par lire ton fichier ligne par ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets(ligne,nb,fichier);
    où ligne est un pointeur vers un tableau de nb caractères et fichier est le pointeur FILE obtenu avec fopen. Je passe les précautions usuelles à prendre. Une fois que tu as lu ta ligne (elle est stockée dans ligne), tu lui fais le traitement proposé pour extraire nom, age et numtel. Puis tu lis la ligne suivante et ainsi de suite

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    jai pas compri ton "if" corenthin ,avec le sscanf .... ) == 3

    petite precision je sais pas si tu as vu mais les chaines se finissent par \n dans le fichier .... je ne vois pas comment faire une boucle pour les lire les unes apres les autres


    Merci

  12. #12
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par scr Voir le message
    tu peux utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sscanf(s,"%s;%s;%s",nom,age,numero_tel);
    Cela ne marche pas s contient des espaces. Utiliser plutôt strtok qui n'est pas parfait mais peut néanmoins s'avérer utile dans bien de cas.

Discussions similaires

  1. Liste chaine et structure dans structure
    Par firemax dans le forum C
    Réponses: 1
    Dernier message: 04/12/2007, 18h06
  2. lecture fichier texte pointeur et structure
    Par shermav dans le forum C
    Réponses: 8
    Dernier message: 13/04/2007, 23h44
  3. Réponses: 2
    Dernier message: 04/04/2007, 10h34
  4. Réponses: 5
    Dernier message: 26/03/2007, 01h30
  5. lecture sur fichier et chaine de caractères
    Par Aethis dans le forum Langage
    Réponses: 3
    Dernier message: 10/07/2006, 11h27

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