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 :

problème commande split


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut problème commande split
    Bonjour à tous,

    J'ai un problème avec un split qui ne fait pas comme je voudrais, mais je ne sais pas pourquoi ni comment le résoudre.


    Mon fichier ressemble à ça :

    tr|A0A0A1P9U9|A0A0A1P9U9_9FUNG
    tr|A0A0A1P9U9|A0A0A1P9U9_9FUNG
    tr|S2KBZ4|S2KBZ4_MUCC1
    tr|S2KBZ4|S2KBZ4_MUCC1
    tr|A0A0A1N2W2|A0A0A1N2W2_9FUNG
    tr|A0A0A1N2W2|A0A0A1N2W2_9FUNG
    tr|A0A0B7NXP7|A0A0B7NXP7_9FUNG
    tr|A0A0B7NXP7|A0A0B7NXP7_9FUNG
    tr|A0A077WQA7|A0A077WQA7_9FUNG
    tr|A0A077WQA7|A0A077WQA7_9FUNG
    tr|A0A0C3C2R2|A0A0C3C2R2_9HOMO
    tr|A0A0C7C076|A0A0C7C076_9FUNG
    tr|A0A0C7C076|A0A0C7C076_9FUNG
    tr|A0A0C9LW96|A0A0C9LW96_9FUNG

    Et je souhaiterais obtenir toute la partie qui se situe apres le deuxième "|" par exemple A0A0A1P9U9_9FUNG

    Pour ce faire j'ai fait la commande :

    @tdecoupage2= split ('|', $ligne);
    $identifiant=$tdecoupage[2];
    print "$identifiant\n";

    Or quand je fais ça au lieu de me donner la chaine de caractere que je veux, il me donne le 2eme caractère de la séquence c'est à dire | .


    Petite précision qui peut être change quelque chose même si je ne pense pas cette commande est un split d'un autre split et je suis dans un while $ligne.

    Voilà merci d'avance pour votre aide.

    Benjamin

  2. #2
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,
    Il te faut seulement "échapper" le caractère "|" dans le split.
    Dans un split comme dans une regexp | joue le rôle de l'opérateur OU
    pour qu'il soit interprété comme caractère | il faut le faire précéder d'un \

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    
    while (<DATA>){
    	print "$_\n";
    	my @tdecoupage = split ('\|', $_);
    	print "$tdecoupage[2]\n";
    }
    
    __DATA__
    tr|A0A0A1P9U9|A0A0A1P9U9_9FUNG
    tr|A0A0A1P9U9|A0A0A1P9U9_9FUNG
    tr|S2KBZ4|S2KBZ4_MUCC1
    tr|S2KBZ4|S2KBZ4_MUCC1
    tr|A0A0A1N2W2|A0A0A1N2W2_9FUNG
    tr|A0A0A1N2W2|A0A0A1N2W2_9FUNG
    tr|A0A0B7NXP7|A0A0B7NXP7_9FUNG
    tr|A0A0B7NXP7|A0A0B7NXP7_9FUNG
    tr|A0A077WQA7|A0A077WQA7_9FUNG
    tr|A0A077WQA7|A0A077WQA7_9FUNG
    tr|A0A0C3C2R2|A0A0C3C2R2_9HOMO
    tr|A0A0C7C076|A0A0C7C076_9FUNG
    tr|A0A0C7C076|A0A0C7C076_9FUNG
    tr|A0A0C9LW96|A0A0C9LW96_9FUNG
    Tiens comme c'est ta première visite sur ce forum, pour commencer
    Mais il y en a plein
    ...


    [EDIT 05:42] Balises
    Au fait dans l'avenir met ton code entre balise CODE icône#
    Sinon c'est illisible...

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    J'ajoute que split utilise en principe un motif d'expression régulière plutôt qu'une chaîne de caractère comme premier argument. C'est d'ailleurs pour cette raison qu'il faut un caractère d'échappement avant le "pipe" qui est un métacaractère dans une regex. Autant rendre explicite dans la syntaxe le fait que c'est une regex.

    Il est donc préférable d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my @tdecoupage2 = split /\|/, $ligne;
    my $identifiant = $tdecoupage[2];
    print "$identifiant\n";

  4. #4
    Membre à l'essai
    Homme Profil pro
    BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Inscrit en
    Juin 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : BTS Systeme Numérique et Informatique Réseau . (2014-2016)
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    Je ne savais pas que la syntaxe split('\|') était possible.
    Le résultat est-il le même que split(/\|/) ou faut-il en privilégier une ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je dirais qu'il faut privilégier l'expression régulière (donc //), car l'usage de "" comporte un cas particulier avec celui de " ".
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

Discussions similaires

  1. Problème commandes shell-trop d'arguments
    Par SuperCed dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/12/2006, 12h57
  2. problème avec Split
    Par Empty_body dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 13/12/2006, 15h23
  3. Problème fonction split
    Par fffonck dans le forum Langage
    Réponses: 2
    Dernier message: 18/09/2006, 11h41
  4. [Tableaux] Problème de split() explode() etc
    Par baleiney dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2006, 11h32
  5. Modifier une option pour la commande split
    Par vbcasimir dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 20/07/2005, 12h24

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