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 :

Limitation arguments sscanf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut Limitation arguments sscanf
    Salut !

    Je suis en train d'essayer de lire un fichier ASCII de plus de 14 colonnes differentes, pour pouvoir utiliser les données dans la suite du programme.
    Le problème c'est que sccanf ne veux pas me disant :

    Limitation sscanf can only take upto 12 arguments

    Y-a-t-il un autre moyen de lire mon fichier ??

    voici l'extrait du code concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    while (fgets(&line,500,fp)) { 
     
         if (strlen(line) < 10) continue; 
     
    sscanf((&line),"%2d%d%3d%2d%s%2d%2d%s%s%d%s%s%s%2d",&hvpart,&canbus,&mod,&cha,&ft,&ftnum,&ftch,&calo,&phi,&eta,&sec,&side,&eleinside,&numele);
     
         cout << hvpart << canbus << mod << cha << ft << ftnum << ftch <<calo << phi << eta << sec << side << eleinside << numele << endl;
    Merci d'avance.

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par spy666ne
    Limitation sscanf can only take upto 12 arguments

    Y-a-t-il un autre moyen de lire mon fichier ??

    voici l'extrait du code concerné :
    Merci d'avance.
    Oui : fgets et strtol

    Jc

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut
    strtol a l'air de ne lire que des entiers, or jai aussi des strings (des noms) dans certaines colonnes...

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par spy666ne
    strtol a l'air de ne lire que des entiers, or jai aussi des strings (des noms) dans certaines colonnes...
    Tu utilises strtol pour les entiers, cela te replace a l'endroit pour la prochaine lecture.

    Si tu as une chaine alors tu utilises sscanf et strchr pour l'espace (il faut un séparateur pour trouver la fin de la chaîne)... Ou uniquement strchr dépendant de ton humeur

    Remarque : cout + endl -> C++, ce n'est pas du C

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    strtok....

    Sauf que ça modifie la chaîne, mais ça t'isoles les token.. Si tu veux garder la chaîne d'origine, tu la recopies.. Sinon

    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
     
    char *p=NULL ;
    int i = 0, j ;
     
    p = strtok(chaine, " \n") ;
    sscanf ( p, "%d", &j );
    ... = j ;
    i = 1 ;
     
    while ( (p = strtok(NULL, " \n")) != NULL )
    {
      i++ ;
     
        if (   (i < 5) || (i == 10) || (i == 14) )
         {
             sscanf ( p, "%d", &j );
             switch ( i)
                {
                    case 1 : ........
                }
         }
       else
        {
             switch ( i)
                {
                    case 5 : ........
                }
        }
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    char *p=NULL ;
    int j = 0 ;
     
    p = strtok(chaine, " \n") ;
    sscanf ( p, "%d", &j );
    .... = j ;
     
    ....
     
    p = strtok(NULL,  " \n");
    strcpy ( toto, p );
    .....

Discussions similaires

  1. Limitation arguments sscanf
    Par spy666ne dans le forum C++
    Réponses: 5
    Dernier message: 01/02/2007, 12h10
  2. Réponses: 3
    Dernier message: 24/07/2006, 13h11
  3. Nombre limité d'arguments sur fonction
    Par richard038 dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2006, 22h35
  4. Réponses: 1
    Dernier message: 06/11/2005, 17h55
  5. Réponses: 4
    Dernier message: 12/09/2003, 11h38

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