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 :

récupérer une chaine dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut récupérer une chaine dans un fichier
    bonjour,

    je veux récupérer une chaine en la composant en plusieurs sous chaine séparé par des espaces.
    voici ma chaine:
    0 NODE_98_length_11049_cov 8 75 channel_109_seq10 7637 7703 - 5982

    j'ai fait un sscanf:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     pr=malloc(25*sizeof(ligne)); //enregistrement
       pr->num =0;
       pr->sid = malloc(75 * sizeof(char));
       pr->sposin = 0;
       pr->sposend = 0;
       pr->qid = malloc(75 * sizeof(char));
       pr->qposin = 0;
       pr->qposend = 0;
       pr->strand = malloc(70 * sizeof(char)); // pour le "-"
       pr->score = 0;
    n = sscanf(chaine,"%d,%[^ ],%d,%d,%[^ ],%d,%d,%[^ ],%d",&pr->num,pr->sid,&pr->sposin,&pr->sposend,pr->qid,&pr->qposin,&pr->qposend,pr->strand,&pr->score);
    printf("N= %d\n",n);
    mais n est toujours égale à 1.

    Merci pour votre aide

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    C'est tout à fait normal: dans ta chaîne de format tu dis à sscanf d'attendre des virgules entre chacun des champs, mais ta chaîne d'entrée contient des espaces à la place. En conséquence, sscanf réussit à extraire le premier entier (0, donc un caractère) puis bloque sur la discordance entre virgule et espace. Elle ne lit donc qu'un caractère.

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    Citation Envoyé par stendhal666 Voir le message
    C'est tout à fait normal: dans ta chaîne de format tu dis à sscanf d'attendre des virgules entre chacun des champs, mais ta chaîne d'entrée contient des espaces à la place. En conséquence, sscanf réussit à extraire le premier entier (0, donc un caractère) puis bloque sur la discordance entre virgule et espace. Elle ne lit donc qu'un caractère.
    selon toi. c'est quoi la solution?

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n = sscanf(chaine,"%d %[^ ] %d %d %[^ ] %d %d %[^ ] %d",&pr->num,pr->sid,&pr->sposin,&pr->sposend,pr->qid,&pr->qposin,&pr->qposend,pr->strand,&pr->score);

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/12/2009, 12h24
  2. Réponses: 14
    Dernier message: 05/05/2008, 15h35
  3. detruire une chaine dans un fichier texte
    Par rober dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 08/11/2006, 09h27
  4. ecrire une chaine dans un fichier [prob]
    Par rogerio dans le forum C++
    Réponses: 5
    Dernier message: 31/05/2006, 02h20
  5. Réponses: 15
    Dernier message: 26/03/2006, 12h10

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