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 de tableau


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut Problème de tableau
    Bonjour,

    je me permets de vous soumettre un problème que je n'arrive vraiment pas à résoudre seule. Je m'explique :

    j'ai créé une sous-routine qui me permet d'ouvrir un fichier et d'en récupérer les informations qui me sont utiles.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    ###################################################################################
    ##fonction qui recupere les position des pics et les aires des pics sur le chromatogramme. Elle recupere et decoupe #
    ##le fichier .poly obtenu apres lancement de phred sur un des produits de PCR#
    sub creer_tableau_hash_poly(){
     
    	$nomSeq = $_[0]; #recuperation du nom du fichier a ouvrir
    	$j = $_[1]; #$j et $g me permettent de récuperer des données de @tabtrie
    	$g = $_[2];
    	@tabtrie = @{$_[3]};
     
    	open(POLY,$nomSeq) or die "impossible d'ouvrir le fichier : $!";
    	@tabpoly = <POLY>; 
    	%poly=();
    	$i=0;
    	while($j<=$#tabtrie)
    	{
    		$position=$tabtrie[$j][16][$g]; #je recupere le  numero de la ligne du fichier qui m'interresse
    		chomp($tabpoly[$position]);
    		@row = split("  ",$tabpoly[$position]); 
     
    		%poly=(
    			base_appelee => [ "$row[0]", "$row[1]"],
    		);
                    #je teste la premiere case de mon tableau @row et je recupere les données qui m'interresse en fonction du résultat du test
                    if ($row[0] =~ /A/i)
                    {
    			push @{$poly{base_appelee}}, "$row[8]";
                    }
                    else
                    {
                            if($row[0] =~ /C/i)
                            {
    				push @{$poly{base_appelee}},"$row[9]";
                            }
                            else
                            {
                                    if($row[0] =~ /G/i)
                                    {
    					push @{$poly{base_appelee}},"$row[10]";
                                    }
                                    else
                                    {
                                            if($row[0] =~ /T/i)
                                            {
    						push @{$poly{base_appelee}},"$row[11]";
                                            }
                                            else
                                            {
    						push @{$poly{base_appelee}},"$row[12]";
                                            }
                                    }
                            }
                    }      
    		$poly{base_autre}=["$row[4]","$row[5]"];
                    if ($row[4] =~ /N/i)
    		{
    			push @{$poly{base_autre}},"$row[6]";
                    }
                    else
                    {
                            if ($row[4] =~ /A/i)            #on met dans la troisieme case du tableau la#
                    	{                               #hauteur du pic appele#
    				push @{$poly{base_autre}},"$row[8]";
                            }
                            else
                            {
                                    if($row[4] =~ /C/i)
                                    {
    					push @{$poly{base_autre}},"$row[9]";
                                    }
                                    else
                                    {
                                            if($row[4] =~ /G/i)
                                            {
    						push @{$poly{base_autre}},"$row[10]";
                                            }
                                            else
                                            {
    						push @{$poly{base_autre}},"$row[11]";
                                            }
                                    }
                            }
                    }
    		push @tab, \%poly;
    		#print "ref(@{${$poly[$i]}[0]}\n";
    		$j+=2;
    		$i+=1;
    	}
    	close POLY;
    	print "$tab[0]{base_appelee}[1]\n";
    	print "$tab[1]{base_appelee}[1]\n";
    	return @tab;
    }
    cette fonction me permet d'ouvrir et de recuperer les lignes de fichier qui m'interresse qui sont de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    KC0AAY1ZB01_AA01A_1.SCF 29991.455707 32438.775896 29991.455707 31079.878700 32584.504018
    C  67  248723.870036  1.000000  N  -1  -1.000000  -1.000000  16080.140050  20126.036101  4912.158351  86.765445
    C  72  248723.870036  1.000000  G  60  30382.609057  303826.090569  27976.829030  21210.108303  5276.021932  4208.124087
    A  74  323302.327992  2.599689  T  75  33491.461806  0.585487  30330.020256  18476.361011  5594.402566  6724.321995
    T  86  200037.733665  1.049101  N  -1  -1.000000  -1.000000  9630.652984  2969.415162  10142.697335  16311.903678
    Les données de chaque ligne sont mises dans une table de hashage selon un ordre bien précis et selon ce que ces données représentent.
    Et comme je peux avoir à récupérer plusieurs lignes du même fichier, j'aimerais mettre la table de hashage obtenue dans un tableau.

    Avec ce que j'ai, j'obtiens la bonne forme de tableau final. Cependant, dans chaque case de mon tableau final @tab, j'ai la même chose...

    Je ne comprends pas trop ce qui ne vas pas. J'avoue débuter en perl et ce problème me parait vraiment insoluble.

    Je vous remercie par avance de toute l'aide que vous pourrez m'apporter
    n'hésitez pas a poser des questions si jamais je m'explique mal

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Je n'ai malheureusement pas le temps de bien lire ton code mais toutefois, une chose m'interpelle.

    Dans ta fonction, aucune des variables n'est déclarée par un my, ce qui sous-entend que tu travailles avec des variables dont la portée touche tout ton script Perl.

    Peut être y a-t-il ici une piste à explorer...

    Et sinon, utilises-tu "use strict;" au début de ton code ? Et rajouter "use warnings;" serait une bonne idée également...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut
    bah en fait j'ai essayé de déclarer mes tableaux avec my mais le resultat est encore pire que ce que j'obtient sans l'utiliser...
    car si je déclare mes tableau avec my ma table de hash %poly contient toujours la meme chose quand je lance ma sous-routine pour différents fichiers dans mon script principal. La table de hash %poly contient toujours les données du premier fichier ouvert.

    sinon je lance le script avec use warning mais pas avec use strict. . Et si je le mets là, il me dis.

    Global symbol "@tab" requires explicit package name....

    il me dit ça en gros pour tout mes tableaux.

    Mais en fait les tableaux créés vont enormément me servir une fois dans mon script principal alors faut au moins que je les déclare avec our?

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Citation Envoyé par Cassie
    bah en fait j'ai essayé de déclarer mes tableaux avec my mais le resultat est encore pire que ce que j'obtient sans l'utiliser...
    Ne te froisse pas pour ma réponse mais un script Perl qui marche encore moins bien si la pragma strict est activée signifie quelque part un script mal conçu au point de départ.

    Et si le compilo de Perl te sort plein d'erreurs lorsque tu actives la pragma strict, dis toi bien qu'en ne l'utilisant pas, le compilo laisse passer pas mal de choses...

    Je te conseille fortement de revoir ton script en utilisant cette pragma tellement utile !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut
    Je ne me froisse en aucun cas

    Je n'avais pas mis de "my" car je pensais que ne pas mettre de "my" ou de "our" car il me semblait que ne rien indiquer induisait que la variable était globale (comme avec "our" si je ne m'abuse).

    Je suis en train de regarder quelles variables déclarer avec quelle portée...

    quand je dis :
    bah en fait j'ai essayé de déclarer mes tableaux avec my mais le resultat est encore pire que ce que j'obtient sans l'utiliser...
    c'est juste que si je déclare mes tableaux avec "my". Le contenu des mes tableaux est "pire" qu'avec rien du tout puisqu'il contient toujours le contenu de la premiere ligne lue.

    alors qu'avec rien je sais que mon tableau a contenu au moins une fois toutes les lignes mais qu'il ne les garde pas.

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Il faudrait que tu nous montre tout ton code parce que là, nous ne voyons que la fonction et sans "my" indiqué devant tes variables utilisées dedans, dur dur d'avoir une bonne vision d'ensemble et surtout de savoir pourquoi tu as ton problème.

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

Discussions similaires

  1. Débutant en Javascript : problème de tableau !
    Par bluheim dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/11/2005, 15h03
  2. [XHTML] problème de tableau
    Par virgul dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/04/2005, 07h18
  3. Problème de tableau
    Par tom06440 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/04/2005, 20h30
  4. Problème de tableau
    Par krfa1 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2005, 11h09

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