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 :

SPLIT


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut SPLIT
    Bonjour a tts,
    J'ai quelque difficultés avec le split depuis 2jours,
    J'ai une chaine qui est la suivante
    La region touche est (33.8416667,7.6880556) Fontenay aux roses
    et j'aime extraire que 33 et 7 et les mettre dans une varaible.J'ai fais ça mais ca marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @tableau=split (/; /,$data1);
    La data1 c'est la phrase et le tableau c'est mon résultat.
    Donc j'ai un probléme de split.
    Please HELP

  2. #2
    tfe
    tfe est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 85
    Points : 95
    Points
    95
    Par défaut
    tu as pas l air d avoir compris a quoi sert le split: il decoupe ta chaine selon des caracteres particuliers:
    ici tu split sur "; ", donc ton tableau contiendra d un un seul element contenant toute la chaine vu que il n y a pas de "; " dans ta chaine.

    Pour ce que tu veux faire, je pense que tu dois utiliser des regex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @tableau  = $data1 =~ /\D+([\d\.]+)\D+([\d\.]+)/;

  3. #3
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: SPLIT
    Citation Envoyé par chekibperl
    Bonjour a tts,
    J'ai quelque difficultés avec le split depuis 2jours,
    J'ai une chaine qui est la suivante
    La region touche est (33.8416667,7.6880556) Fontenay aux roses
    et j'aime extraire que 33 et 7 et les mettre dans une varaible.J'ai fais ça mais ca marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @tableau=split (/; /,$data1);
    La data1 c'est la phrase et le tableau c'est mon résultat.
    Donc j'ai un probléme de split.
    Please HELP
    Sur une chaine comme celle-ci, l'usage de split n'est pas l'idéal !!!

    Pour arriver à récupérer ce que tu veux, il faudrait enchaîner plusieurs splits avec des motifs de coupure différents, et en négligeant les portions qui ne correspondent pas ...

    C'est un boulot pour une extraction par expression rationnelle bien sentie, ça !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $ch = "La region touche est (33.8416667,7.6880556) Fontenay aux roses";
    my @tab = ($ch =~ /\D(\d+)\./g);
    $, = ", ";
    print @tab;
    print "\n";
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Re: SPLIT
    Ca marche à merveille pour ce cas ta ligne 2euro,

    mais en réalité je peux avoir des chaines comme

    La région touché est (-3.24546546,120.6846846) ASZER gael
    est ce que je veux 2Euro c'est d'extraire la partie entiére -3 et 120, mais ca marche pas

  5. #5
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Alors il faut modifier l'expression rationnelle pour en tenir compte ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @tab = ($ch =~ /\D(-*\d+)\./g);
    Est un bon début ...
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    si je comprend bien, tu veux à chaque fois le chiffre avant le premier point et entre les chiffres entre la virgule et le deuxieme point????????
    est que toutes tes lignes seront semblables, c'est à dire mes configuration?
    sinon voici une regex en se basant sur celle d'eurocents.

    -3.24546546,120.6846846
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    my $ch = "La region touche est (33.8416667,7.6880556) Fontenay aux roses";
    my @tab = ($ch =~ /\D(-?\d+)\./g);
    $, = ", ";
    print @tab;
    print "\n";
    voilà

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par 2Eurocents
    Alors il faut modifier l'expression rationnelle pour en tenir compte ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @tab = ($ch =~ /\D(-*\d+)\./g);
    Est un bon début ...
    pffffff.....je me suis fait doubler

  8. #8
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par djibril
    pffffff.....je me suis fait doubler
    Certes, mais il est préférable de quantifier le - avec un ?, comme tu l'as fait, qu'avec un * comme je l'ai fait de façon fort bourrine
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    petite question,
    est ce qu'on pourra pas mettre le resultat obtenu dans une variable,

    je dois écrire ça?

  10. #10
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    bon on t'as fait une regex racourci ou chaque pattern trouvé sera dans une case de ton tableau.
    Sinon si t'es sur qu'à chaque fois y aura deux pattern trouvé, tu peux ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $ch = "La region touche est (33.8416667,7.6880556) Fontenay aux roses";
    my ($motif1, $motif2) = ($ch =~ /\D(-?\d+)\./g);
    $, = ", ";
    print @tab;
    print "\n";
    voilà
    $motif1 recupere $1 et $motif2 recupere $2

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par chekibperl
    petite question,
    est ce qu'on pourra pas mettre le resultat obtenu dans une variable,

    je dois écrire ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res=@ch; <=> $res=scalar(@ch);
    donc ton $res recupere le nombre de case du tableau

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Non djibril,

    dans @ch j'obtient par exemple 41 -2
    je veux mettre dans $res 41 -2
    avec l'espace entre 41 et -2.

  13. #13
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par chekibperl
    Non djibril,

    dans @ch j'obtient par exemple 41 -2
    je veux mettre dans $res 41 -2
    avec l'espace entre 41 et -2.
    J'ai bien compris. Je te disait juste que ta facon d'ecrire $res=@ch n'est pas bonne car $res recupere pas ce que tu veux .
    Maitenant, tu recupere le code qu'on t'as ecris et tu fais un join de ton tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my $ch = "La region touche est (33.8416667,7.6880556) Fontenay aux roses";
    my @tab = ($ch =~ /\D(-?\d+)\./g);
    my $res = join (" ", @tab);
    print $res;

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    PARFAIT DJIBRIL ET 2EURO

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

Discussions similaires

  1. [langage] utilisation de 'split'
    Par mimilou dans le forum Langage
    Réponses: 9
    Dernier message: 24/02/2004, 13h28
  2. [LG]Split qui marche pas
    Par macluvitch dans le forum Langage
    Réponses: 3
    Dernier message: 30/11/2003, 18h19
  3. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  4. Split et calcul de ligne du tableau
    Par La_picolle dans le forum ASP
    Réponses: 6
    Dernier message: 27/08/2003, 15h58
  5. split en xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/03/2003, 10h08

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