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 :

Extraire des entiers séparés par des tabulations dans une ligne


Sujet :

C

  1. #1
    Membre habitué Avatar de condor_01
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    294
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 294
    Points : 133
    Points
    133
    Par défaut Extraire des entiers séparés par des tabulations dans une ligne
    Bonjour,
    J'ai un fichier qui a le format suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0  1  3  5
    1  4  2
    2  3
    3  0  2
    Je veux axtraire les entiers de chaque ligne séparement.
    J'ai fait utilisé fgets() avec strtol() mais je n'ai comme résultat que le premier entier seulement !!
    C'est quoi le problème ?

  2. #2
    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 condor_01 Voir le message
    Bonjour,
    J'ai un fichier qui a le format suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0  1  3  5
    1  4  2
    2  3
    3  0  2
    Je veux axtraire les entiers de chaque ligne séparement.
    J'ai fait utilisé fgets() avec strtol() mais je n'ai comme résultat que le premier entier seulement !!
    C'est quoi le problème ?
    Tu utilises strtol() avec une boucle.

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NB_ELEMS(a) ( sizeof (a) / sizeof *(a) )
     
    int main(void)
    {
        char ligne[] = "1\t2\t3\t4\t5";
        char *p = ligne;
        char *pend = NULL;
        int nums[5] = {0};
        size_t i = 0;
     
        /* -tc- on effectue la saisie */
        do 
        {
            nums[i] = strtol(p, &pend, 0);
            i++;
            p = pend;
        } 
        while (i < NB_ELEMS(nums) && *pend != 0);
     
        /* -tc- affichage du tableau nums */
        for (i = 0; i < NB_ELEMS(nums); i++)
        {
            printf("%d\n", nums[i]);
        }
     
        return EXIT_SUCCESS;
    }

    Thierry

  3. #3
    Membre habitué Avatar de condor_01
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    294
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 294
    Points : 133
    Points
    133
    Par défaut
    Voila la boucle que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (fgets(chaine,sizeof(chaine),FICHIER2)!=NULL)
    {
     valeur = strtol(chaine,NULL,10);
    printf("valeur %ld \n", valeur);
    }
    Et je n'ai que le premier entier de chaque ligne
    Je vais essayer ta solution
    Merci

  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 condor_01 Voir le message
    Voila la boucle que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (fgets(chaine,sizeof(chaine),FICHIER2)!=NULL)
    {
     valeur = strtol(chaine,NULL,10);
    printf("valeur %ld \n", valeur);
    }
    Et je n'ai que le premier entier de chaque ligne
    Je vais essayer ta solution
    Merci
    Tu dois imbriquer deux boucles. Une pour la saisie ligne par ligne à partir du fichier, et une pour la conversion de chaque entier.

    Thierry

  5. #5
    Membre habitué Avatar de condor_01
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    294
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 294
    Points : 133
    Points
    133
    Par défaut
    STP est ce que tu peux m'expliquer cette boucle en détail

    do
    {
    nums[i] = strtol(p, &pend, 0);
    i++;
    p = pend;
    }
    while (i < NB_ELEMS(nums) && *pend != 0);
    et si on déclare char pend[NB] est ce que ça marche ?
    Merci

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par condor_01 Voir le message
    et si on déclare char pend[NB] est ce que ça marche ?
    Non pend doit être de type char *. Lire la doc de la fonction en cas de doute...

  7. #7
    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 condor_01 Voir le message
    STP est ce que tu peux m'expliquer cette boucle en détail
    En lisant attentivement la documentation de strtol(), tu devrais la comprendre. Pour la doc, c'est par ici: http://man.developpez.com/man3/strtol.3.php

    Thierry

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/02/2011, 15h21
  2. récupérer des mots séparés par un espace dans une ligne
    Par laurentze dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 14/06/2010, 16h04
  3. Récupération d'entiers séparés par des espaces
    Par Stefounette dans le forum JavaFX
    Réponses: 2
    Dernier message: 20/04/2010, 14h42
  4. Récupérer des mots séparés par un espace dans un .txt
    Par elnino67 dans le forum Débuter
    Réponses: 2
    Dernier message: 28/05/2008, 22h13
  5. [RegEx] Extraire des nombres séparés par des caractères spéciaux
    Par GouKen dans le forum Langage
    Réponses: 2
    Dernier message: 29/01/2008, 16h49

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