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 :

[String] string --> tableau de caractères : comment faire


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut [String] string --> tableau de caractères : comment faire
    Bonjour,

    j'allucine, après quand même pas mal de recherches, de constater qu'on ne peut traiter un scalaire en tableau de caractères en perl.

    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $seq = 'ACGTACGT';
    print $seq[3]
    ne donne rien (voire une erreure avec use strict et pas 'T').

    J'espère que je suis complètement à la masse et que vous avez une solution !

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Bonjour

    A mon avis, tu confonds avec PHP. Une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/usr/bin/perl -w
     
    use strict;
     
    my $seq = 'ACGTACGT';
     
    print "".substr($seq, 3, 1);
    Maintenant, tu peux en faire une fonction

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    Y'a pas moins lourd que d'utiliser substr??!!!!
    Un peu décevant le perl!...

  4. #4
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Il est très (très) rare qu'on ait besoin de traiter un "tableau de caractère" en Perl parce que ses fonctions de manipulations de string sont beaucoup plus puissantes et accessibles que dans la plupart des autres langages. Ce "manque" qui semble te décevoir traduit donc simplement le fait que tu ne sais pas encore faire ce que tu veux en Perl et que tu emploies donc une méthode d'un autre langage. Si tu nous donnait un exemple des manipulations que tu souhaites effectuer, on pourrait essayer de te montrer.

    --
    Jedaï

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Points : 34
    Points
    34
    Par défaut
    sinon tu peux aussi stocker ta variable scalaire dans un tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/usr/bin/perl -w
     
    use strict;
     
     
    my $seq = 'ACGTACGT';
    my @dna = split('',$seq); #tu split ton tableau par une chaine vide, doc tu auras chaque lettre dans une case du tableau
     
    print $dna[2];
    [/code]

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    Ouai non je sais que perl est quand même bien conçu mais c'est domage d'avoir "supprimé" cette "fonctionnalité" qu'on trouve dans python par exemple.

    Ce que je veux faire touche à la biologie mais en terme simple je veux regarder le nombre de différences entre 2 chaines de caractères.

    Exemple les 2 chaines (séquences):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $seq1="AAATAAATAAA"
    $seq2="AATAATTT"
    Dans cet exmple le but serait de comparer position par position toutes les lettres des 2 chaines puis décaler la plus petite d'un caractère par rapport à la plus grande et recomprarer et etc.
    Soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    AAATAAATAAA
    AATAATTT  --> 4 différences
     
    AAATAAATAAA
     AATAATTT  --> 2 différences
     
    AAATAAATAAA
      AATAATTT  --> 4 différences
     
    AAATAAATAAA
       AATAATTT  --> 6 différences
    et donc retourner le nombre minimum de différence possible entre ces 2 chaines (ici 2).
    Et du coup on imagine grandement l'avantage de traiter les string comme des chaines de caractères dans ce cas.
    D'autant que j'aurai dans le pire des cas plusieurs 100 000 de comparaisons à faire!
    Mais ne t'embète pas trop avec ça je vais me débrouiller!
    Merci pour ta patience.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    Bien vu le split avec "" comme motif! Je n'avais même pas imaginé que ça pourait marcher!
    Merci

    (mais je maintien que c'est domage le coup du tableau de caractères. Parceque deriere le split se cache quand même quelques opérations qui alourdissent la tache...)

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Points : 34
    Points
    34
    Par défaut
    Tu as pensé à regarder dans les librairies de BioPerl s'il y avait des choses qui pourraient t'aider ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    J'ai repéré un bon module que j'ai en plus d'installé sur mon ordi, le Bio::Tools::dpAlign, mais il me faut le package bio-ext (avec tous les binaires j'imagine) et mon problème c'est que je galère formidablement à installer quoique ce soit avec le cpan (j'avais installé bioperl avec un rpm de mandriva tout bien fait).

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2023, 15h51
  2. Réponses: 5
    Dernier message: 09/09/2010, 17h39
  3. Convertir une string en tableau de caractères
    Par alainpeniche dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2007, 20h00
  4. Réponses: 3
    Dernier message: 06/03/2006, 07h31

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