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

Langage Perl Discussion :

[regex]Problème pour récupérer les caractères d'une chaine


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut [regex]Problème pour récupérer les caractères d'une chaine
    Salut à tous
    Voila j'ai un petit souci pour récupérer les caractères d'une chaine.
    En fait, je génère avec mon script un code composé de 6 chiffres à l'aide de la fonction rand().
    Et ce que je souhaiterai, c'est récupérer un à un les chiffres qui composent ce code. Suis assez clair?
    Prenons l'exemple ou le rand() génère le code 123456
    Et bien je souhaiterais afficher avec un simple print "1,2,3,4,5,6".
    pour cela j'ai fait le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $code = int(rand(900000)+100000);
    print "le code est $code";
    (my $un,my $deux,my $trois,my $quatre,my $cinq,my $six) = ($code =~ m/^(.)(.)(.)(.)(.)(.)/);
    print "voici mon code : $un,$deux,$trois,$quatre,$cinq,$six";
    mais voila, en reponse, je n'ai rien, si ce n'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    le code est 257916
    voici mon code : ,,,,,
    c'est donc que les variables $un ... sont vides.
    mais pourquoi?

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Ton code est incorrect, tu veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $code = int(rand(900000)+100000);
    print "le code est $code\n";
    my ($un, $deux, $trois, $quatre, $cinq, $six) = ($code =~ m/^(.)(.)(.)(.)(.)(.)/);
    print "voici mon code : $un, $deux, $trois, $quatre, $cinq, $six\n";
    Par ailleurs, il s'agit là d'un code très peu esthétique...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $code = int(rand(900000)+100000);
    print "le code est $code\n";
    my @digits = split //, $code;
    print "voici mon code : " . (join ", " , @digits) . "\n";
    Tu continues à avoir accès à chaque digit séparément si tu en as besoin par la suite, mais de façon bien plus propre (et robuste, par exemple si tu change le nombres de chiffres dans ton code).

    --
    Jedaï

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    Merci jedaï
    mais en fait ce que je veux faire c'est recuperer les chiffres pour ensuite pouvoir lancer des fichiers audios.
    En fait j'utilise Asterisk (si quelqu'un connait, et je n'en doute pas), et je veux faire un systeme ou l'utilisateur appelle pour obtenir un code personnel.
    le code est donc généré avec rand() et je veux ensuite que mon serveur telephonique dicte ce code chiffre pr chiffre, sachant que le fichier audio disant "1" s'appelle '1.wav'.
    j'imagine que mes explications sont loin d'etre claires et je m'en excuse...
    si on prend un exemple simple:

    je genere le code 12
    je veux que le serveur dise "1" puis "2", c'est a dire qu'il lance le fichier audio "1.wav" puis "2.wav".
    donc pour cela je veux stocker le premier chiffre dans une variable $un, puis le deuxieme dans la variable $deux.comme ca on lance le lecteur audio avec en parametre $un puis $deux et le tour est joue...en theorie

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    $un est juste la même chose que $digits[0] dans mon code. (Avoir des variables $un $deux etc est un très mauvais signe pour le design d'une application, et trahit la plupart du temps un programmeur venus tout droit du basic ou équivalent, ce n'est pas vraiment une pratique recommandée)
    Néanmoins tu peux tout à fait utiliser la version corrigée de ton code plutôt que ma proposition d'amélioration (bien que je ne te le conseille pas : les tableaux sont bien plus flexibles et propres).

    --
    Jedaï

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    Bon merci Jedai, mais maheureusement quelque soit la methode utilisee, le probleme est toujours present, a savoir que je reste incapable de recuperer mon code chiffre par chiffre.
    Le probleme peut il venir du fait que $code est cree a l'aide de rand?
    (attention cette question m'a peut etre trahi, mais oui je suis nul en prog )

  6. #6
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    J'ai déjà eu des problèmes avec les regexp inopérantes sur des nombres. La solution que j'ai trouvé a été de passer par une chaine de caractères...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $code = sprintf("%d", (int(rand(900000)+100000)));
    Mais là, en l'occurence, le code de Jedai fonctionne sans modification. quand tu l'executes, quel résultat obtiens-tu ?

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

Discussions similaires

  1. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 17h41
  2. Réponses: 12
    Dernier message: 04/03/2007, 12h43
  3. Réponses: 12
    Dernier message: 26/06/2006, 00h24
  4. Réponses: 1
    Dernier message: 07/06/2006, 19h56
  5. Réponses: 10
    Dernier message: 16/11/2005, 09h33

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