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écuperer juste ce qu'il y a après un @ dans une variable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2017
    Messages : 11
    Par défaut Récuperer juste ce qu'il y a après un @ dans une variable
    Bonjour,
    après avoir survolé plusieurs forums et essayé plusieurs exemples de code postés sur certain forums, je viens vers vous afin de savoir comment je pourrais effectuer l'équivalent de split MASUPERVAR @

    Exemple :

    av[0] est égale à StatServ
    av[1] est égale à Victorien=+guest@1329595931.fr

    [11:42] <StatServ> Victorien=+guest@1329595931.fr

    je voudrais que ma fonction retourne le 1329595931.fr seulement s'il-vous-plait.
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 475
    Par défaut
    Bonjour,

    Ce n'est pas forcément très difficile mais il faut bien retenir qu'en C, il n'y a pas vraiment de type « chaîne de caractère » natif. Soit c'est un tableau de caractère qui contient directement ta chaîne mais tu ne pourras pas faire une fonction qui retourne un tableau, soit ta variable est en fait un pointeur vers le bon endroit en mémoire.

    Le plus simple ici est de recourir à strchr() (String Character). Si tu écris :

    Alors cette fonction te renverra un pointeur vers l'adresse du « @ » dans ta chaîne, depuis lequel tu pourras lire le reste, jusqu'au caractère nul final. Si tu veux ignorer ce « @ », il te suffit d'avancer d'exactement 1 caractère, avec l'arithmétique des pointeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        char * domain;
     
        domain = strchr (av[1],'@');
     
        if (domain != NULL) 
        printf ("Nom du domaine de l'adresse e-mail : %s\n", domain+1);
        else
        printf ("Séparateur @ non trouvé dans la chaîne.\n");

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2017
    Messages : 11
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Bonjour,

    Ce n'est pas forcément très difficile mais il faut bien retenir qu'en C, il n'y a pas vraiment de type « chaîne de caractère » natif. Soit c'est un tableau de caractère qui contient directement ta chaîne mais tu ne pourras pas faire une fonction qui retourne un tableau, soit ta variable est en fait un pointeur vers le bon endroit en mémoire.

    Le plus simple ici est de recourir à strchr() (String Character). Si tu écris :

    Alors cette fonction te renverra un pointeur vers l'adresse du « @ » dans ta chaîne, depuis lequel tu pourras lire le reste, jusqu'au caractère nul final. Si tu veux ignorer ce « @ », il te suffit d'avancer d'exactement 1 caractère, avec l'arithmétique des pointeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        char * domain;
     
        domain = strchr (av[1],'@');
     
        if (domain != NULL) 
        printf ("Nom du domaine de l'adresse e-mail : %s\n", domain+1);
        else
        printf ("Séparateur @ non trouvé dans la chaîne.\n");
    Bonjour, merci cela fonctionne, dernière question, comment puis je faire suivre une variable ? dans deux fonctions différente,

    je m'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int denora_event_302(char *source, int ac, char **av)
    {
        if (denora->protocoldebug) {
            protocol_debug(source, ac, av);
        }
    char * domain;
     
        domain = strchr (av[1],'@');
     
        if (domain != NULL) 
    send_cmd(s_StatServ, "PRIVMSG #CS :vhost = %s", domain+1);
        else
    send_cmd(s_StatServ, "PRIVMSG #CS :@ non trouvé");
    }
    je voudrais récupéré la variable domain+1 ici (localisé dans le même fichier source) a la place du "Indisponible":

    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
    int denora_event_nick(char *source, int ac, char **av)
    {
        char *ipchar = NULL;
        Server *s;
     
        if (denora->protocoldebug) {
            protocol_debug(source, ac, av);
        }
        if (ac != 2) {
            s = findserver_uid(servlist, av[5]);
    	 ipchar = host_resolve(av[4]);
    	 send_cmd(s_StatServ, "USERHOST :%s", av[0]);
    	        do_nick("", av[0], av[3], "Indisponible", s ? s->name : source, av[6],
                    UplinkSynced ? time(NULL) : 0, 0, ipchar, NULL, NULL,
                    strtoul(av[4], NULL, 10), "+i", NULL);
           send_cmd(s_StatServ, "PRIVMSG %s :VERSION", av[0]);
    	 free(ipchar);
        } else {
            do_nick(source, av[0], NULL, NULL, NULL, NULL,
                    0, 0, NULL, NULL, NULL, 0, NULL, NULL);
        }
        return MOD_CONT;
    }
    Merci d'avance de votre aide à tous

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 4nth0nym3 Voir le message
    Bonjour, merci cela fonctionne, dernière question, comment puis je faire suivre une variable ? dans deux fonctions différente,
    Bonjour
    La solution de facilité est d'utiliser une variable globale. Ca peut suffire pour les trucs simples mais pour un projet de grande envergure c'est la pire des idées (déjà quand il y a beaucoup de fonctions on ne sait plus ensuite qui y touche ; et si en plus tu crées par accident une variable locale du même nom que la globale, cette dernière est alors masquée et indisponible).

    Sinon il faut que chacune des deux fonctions puisse modifier une variable qui lui est extèrieure. Cela ne peut se faire que si tu passes l'adresse de cette variable à tes deux fonctions (et les fonctions récupèreront cette adresse dans un pointeur)

    Citation Envoyé par 4nth0nym3 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int denora_event_302(char *source, int ac, char **av)
    {
        if (denora->protocoldebug) {
            protocol_debug(source, ac, av);
        }
    char * domain;
     
        domain = strchr (av[1],'@');
    }
    je voudrais récupéré la variable domain+1 ici (localisé dans le même fichier source) a la place du "Indisponible":
    Donc là ça peut se faire ainsi
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int denora_event_302(char *source, int ac, char **av, char **domain)
    {
        if (denora->protocoldebug) {
            protocol_debug(source, ac, av);
        }
     
        *domain = strchr (av[1],'@');
        ... (suite du code)...
    }

    Et chez l'appelant
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *toto;
    denora_event_302(..., ..., ..., &toto);
    Quand la fonction se termine, la variable "toto" contient exactement la même chose que ce qui a été copié dans la variable interne "domain" dans la fonction...

    Ou alors dans ce cas très particulier, ta fonction (puisqu'elle ne renvoie rien) peut renvoyer le pointeur "domain". Dans ce cas tu ne "suis pas" une variable dans ta fonction mais tu t'arranges pour que ta fonction renvoie l'info qui t'intéresse que tu récupères depuis l'appelant. Cela ne correspond donc plus à ta demande (suivre une variable) mais si l'info voulue est bien récupérée, pourquoi pas...

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char* denora_event_302(char *source, int ac, char **av)
    {
        if (denora->protocoldebug) {
            protocol_debug(source, ac, av);
        }
        char *domain;
     
        domain = strchr (av[1],'@');
        ... (suite du code)...
        return domain;
    }

    Et chez l'appelant
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *toto;
    toto=denora_event_302(..., ..., ...);
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2017
    Messages : 11
    Par défaut
    Merci de ta réponse en rapport a mon logiciel ce n'est pas possible de faire comme j'avais penser faire.

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2017
    Messages : 11
    Par défaut récupérer ce qu'il y a dans une var avant un =
    Re bonjour, a l'inverse d'hier je voudrais savoir comment récupérer ce qui se trouve avant =

    syntax recu : Droopsy=+guest@3817826718.net
    je voudrais prendre Droopsy(varie suivant le nick de l'utilisateur) jusque = sans le comprendre dans le resultat

    Merci d'avance

  7. #7
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    C'est une mission pour strchr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const char *substr(const char *s, char delim) {
        const char *const pos = strchr(s, delim);
        return pos ? pos + 1 : NULL;
    }

    Tu peux également réaliser un split destructif via strtok si tu as besoin de quelque chose de plus complexe.


    EDIT: grillé par Obsidian.

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

Discussions similaires

  1. recuperer la valeur d'un input crée en js dans une variable php
    Par pitichamo dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/10/2009, 20h44
  2. Recuperer variable Javascript dans une variable Java
    Par drizztoli dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/09/2005, 14h58
  3. Recuperer un enregistrement de requete SQL dans une variable
    Par kleenex dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/09/2005, 15h59
  4. Récupérer contenu de fichier dans une variable
    Par peppena dans le forum Linux
    Réponses: 4
    Dernier message: 15/06/2005, 12h50
  5. Recuperer un champ calculé dans une variable....
    Par vijeo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/12/2004, 14h57

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