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 :

Encore des récupérations de données


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Par défaut Encore des récupérations de données
    Bonjour à tous
    encore une fois je me tourne vers la communauté pour avoir réponse à ma question ...
    J'ai une chaine de caracteres qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Event: Unlink
    Privilege: call,all
    Channel1: SIP/104-09525628
    Channel2: SIP/105-0951fb70
    Uniqueid1: 1157364724.67
    Uniqueid2: 1157364724.68
    CallerID1: 104
    CallerID2: 105
    (certains reconnaitront le log de la manager API d'asterisk ... )
    Je souhaite affecter les variables ID1, ID2, CALLER1 et CALLER2 aux valeurs renseignées dans les champs Uniqueid1, Uniqueid2, CallerID1 et CallerID2.
    Quelle est la méthode la plus rapide et la plus appropriée ? Strtok ?
    Merci !

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Jibees
    Quelle est la méthode la plus rapide et la plus appropriée ? Strtok ?
    C'est en tous cas celle que j'aurais utilisée, strtok pour retrouver les étiquettes puis une fonction de conversion pour affecter les données aux variables numérique !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Par défaut
    Comment utilises tu strtok pour retrouver les étiquettes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SI strtok(chaine, chaineARetrouver) EST DIFFERENT DE NULL ALORS
    j'ai trouvé la chaine
    FSI
    ?

  4. #4
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Comment utilises tu strtok pour retrouver les étiquettes ?
    Voici un lien:
    http://www.elook.org/programming/c/strtok.html

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Bin tout simplement dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while ((tmp = strtok (buffer, ":") != NULL)
    {
       /* Ici tu compares le contenu de tmp avec un des noms
           d'étiquette que tu dois retrouver et tu fait en conséquence
       */
     
       buffer = NULL;
    }
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Par défaut
    Citation Envoyé par Dvp.com
    char *strtok (char *s, const char *t);

    Cette fonction décompose la chaîne s en sous-chaîne délimitées par un caractère appartenant à ct.
    Le problème c'est que je ne veux pas que la souschaine soit délémité pas UN caractere appartenant à ct mais par toute la chaine ...

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Jibees
    Le problème c'est que je ne veux pas que la souschaine soit délémité pas UN caractere appartenant à ct mais par toute la chaine ...
    Heu est quelle est l'avantage ? Il faut bien donner un délimiteur présent dans la chaîne, donc là tu veux récupérer uniquement les données numérique à ce que j'ai compris donc je vois pas ce qui te pose problème là
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Par défaut
    Citation Envoyé par Franck.H
    Bin tout simplement dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while ((tmp = strtok (buffer, ":") != NULL)
    {
       /* Ici tu compares le contenu de tmp avec un des noms
           d'étiquette que tu dois retrouver et tu fait en conséquence
       */
     
       buffer = NULL;
    }
    Buffer est la chaine de caracteres qui contient toutes les informations ?

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Oui
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Par défaut
    Citation Envoyé par Franck.H
    Oui
    Et tu la mets à NULL ?

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Jibees
    Et tu la mets à NULL ?
    Le mieux est d'utiliser une copie de la chaîne car strtok modifies la chaîne à chaque appel (il met \0 après chaque appel en fait) et le second appel à strtok sur la même chaîne doit être NULL sinon tu as un comportement indéterminé !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Par défaut
    Ok merci, je teste ...

    EDIT : bon ca c pas tres joli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((tmp = strtok (buffer, ":") != NULL)

  13. #13
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Et tu la mets à NULL ?
    C'était expliqué dans le lien que je t'ai mis avec un exemple d'utilisation.

    Description:
    The strtok() function returns a pointer to the next "token" in str1, where str2 contains the delimiters that determine the token. strtok() returns NULL if no token is found. In order to convert a string to tokens, the first call to strtok() should have str1 point to the string to be tokenized. All calls after this should have str1 be NULL.
    Au dexième passage dans strtok, dans ton cas, tu récupéreras la valeur numérique selon l'étiquette que tu testes.

  14. #14
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Ou avec "sscanf" si la chaine garde un format constant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char s[1024]="Event: Unlink\nPrivilege: call,all\nChannel1: SIP/104-09525628\nChannel2: SIP/105-0951fb70\nUniqueid1: 1157364724.67\nUniqueid2: 1157364724.68\nCallerID1: 104\nCallerID2: 105";
     
    char ID1[64],ID2[64],CALLER1[64],CALLER2[64];
     
    sscanf(s,"%*[^:]:%*[^:]:%*[^:]:%*[^:]:%*[^:]:%*[ ]%[0-9.]%*[^:]:%*[ ]%[0-9.]%*[^:]:%*[ ]%[0-9]%*[^:]:%*[ ]%[0-9]",ID1,ID2,CALLER1,CALLER2);
    printf("ID1 : %s\nID2 : %s\nCALLER1 : %s\nCALLER2 : %s\n",ID1,ID2,CALLER1,CALLER2);

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Par défaut
    Citation Envoyé par Franck.H
    Bin tout simplement dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while ((tmp = strtok (buffer, ":") != NULL)
    {
       /* Ici tu compares le contenu de tmp avec un des noms
           d'étiquette que tu dois retrouver et tu fait en conséquence
       */
     
       buffer = NULL;
    }
    Mais cette technique ne permet pas d'aller plus loin que la premiere occurence de ":" ? En tout cas je ne vois que les premieres occurrences ...

  16. #16
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Essaies et observes ce bout de code, tu verras qu'au deuxième passage tu récupères le nombre. A toi de jouer pour récupérer seulement celui ci dans une chaine
    Enfin, convertis de string vers entier selon besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        char str[] = "valeur:1523";
        char delims[] = ":";
        char *result = NULL;
     
        result = strtok( str, delims );
        while( result != NULL ) {
        printf( "result is \"%s\"\n", result );
        result = strtok( NULL, delims );
        }

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Par défaut
    tout à fais, c moi j'ai une ligne qui a trainée et qui n'aurait pas dû ...

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Par défaut
    Citation Envoyé par zooro
    Il faut bien faire attention à faire une COPIE de ta chaîne si tu utilises strtok, parce qu'il modifie celle que tu lui donnes !
    J'y ai pensé !

  19. #19
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Désolé, je n'avais pas vu la deuxième page quand j'ai répondu !

Discussions similaires

  1. [Toutes versions] Automatiser des Récupérations de données VBA
    Par mattdogg97 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 31/01/2011, 14h28
  2. [MySQL] Incompréhension au niveau des récupérations de données
    Par kenny49 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/04/2007, 18h19
  3. Réponses: 2
    Dernier message: 29/08/2006, 20h56
  4. Réponses: 12
    Dernier message: 20/04/2006, 14h23
  5. problème récupération de données dans des fichiers .DAT
    Par indymontpellier dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/04/2006, 07h54

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