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 :

[langage] problèmes de tableaux avec des valeurs non initialisées


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 162
    Points : 72
    Points
    72
    Par défaut [langage] problèmes de tableaux avec des valeurs non initialisées
    Bonjour,

    J'ai crée une fonction isExon() qui renvoie un tableau d'entiers. Quand j'appelle ma fonction si je fais un print du tableau, il contient bien les valeurs prévues.
    Par contre quand j'écris le code suivant pour créer un dessin avec Tk qui appelle la fonction nommée isExon et qui ses sert du tableau renvoyé j'ai un message du type Use of unitialized value

    isExon();
    for($i=0;$i<=$#tableauexon;$i++)
    {
    if($tableauexon[$i]!=-1)
    {
    $dessin->create('rectangle',
    '160','70',
    $tableauexon[$i+1],'90',
    -fill=>'blue');
    }
    }
    Quelqu'un peut-il m'expliquer pqoi j'ai ce message alors que quand j'affiche le tableau j'ai bien des valeurs dedans???

    Merci
    Delphine po douée en Perl :-(

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    le message d'erreur doit egalment te donner la ligne, peut tu nous dire a quelle ligne se trouve l'erreur ?
    quelques remarques :
    ou initialises / affectes tu ton tableau ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @tableauexon=isExon(); # ????
    ton for est etrange, un tableau va de 0 a n et toi tu vas de 0 à n+1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $i;
    for($i=0;$i<scalar @tableauexon;$i++)
    tu vas peut etre aussi lire un valeur qui nexiste pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $dessin->create('rectangle',
    '160','70',
    $tableauexon[$i+1],'90', <====== !!!!
    les fautes d'orthographe de ce texte sont sous license GPL. Merci d'informer le proprietaire de la faute en cas de modification.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    pour resumer :
    on a un tableau de 3 integer :
    le code correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my @tab=(1,2,3);
    my $i;
    for($i=0;$i<scalar @tab;$i++)
    {
       print "$i : $tab[$i]\n";
    }
    # ou
    foreach (@tab)
    {
       print "$_\n";
    }
    les fautes d'orthographe de ce texte sont sous license GPL. Merci d'informer le proprietaire de la faute en cas de modification.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    Mon tableau va à i+1 c'est pour un problème d'algo... Mais j'ai essayé avec i et j'ai le même message...

    j'initialise mon tableau dans la fonction isExon() de la façon suivante :
    $tableauexon=();
    J'ai trouvé ça sur le net c'est peut-être pas ce qu'il faut faire??

    Ce qu'il me parait bizarre c'est que j'ai fait la même type de chose pour une autre fonction et je n'ai pas ce problème.

    Et je me répète mais le print(@tableauexon) me donne bien les valeurs que je veux...

    Je vais quand même essayer ce que vous m'avez conseillé
    Merci beaucoup
    Delphine

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    tu peux me tutoyer
    pour initialiser un tableau il suffit de le declarer :
    my @tableau;
    pour le vider :
    undef @tableau;
    les fautes d'orthographe de ce texte sont sous license GPL. Merci d'informer le proprietaire de la faute en cas de modification.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 162
    Points : 72
    Points
    72
    Par défaut
    J'ai le mêm problème en déclarant mon tableau et j'ai un message en plmus du type unusual use of a variable...

    Je donne le code entier de ma fonction en dernier recours :

    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
     
    sub isexon()
    {
    &debExon($_[0]);
    &finExon($_[0]);
    my $j=0;
    @tableauexon; #pas en local car j'en ai besoin dans le fichier qui appelle la fonction
    $#tableauexon=-1;
    $tableauexon=();
    while($tableaudebexon[$j]!=-1
    {
    if($tableaudebexon[$j<tableaufinexon[$j])
    {
    $tableauexon[$j]=$tableaudebexon[$j];
    $tableauexon[$j+1]=$tableaufinexon[$j];
    }
    $j++
    }
    return $tableauexon;
    }
    Voilà et dans un autre fichier j'appelle donc cette fonction pour me servir du tableauexon[$i]
    L'erreur est à la ligne où il ya :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $dessin->create('rectangle',
    chose encore plus bizarre!!!

    Delphine qui comprends rien :-(

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    Ce n'est pas bizarre !!!!
    tu vas lire une valeur qui n'existe pas :
    a cause du +1 sur la ligne "$dessin-> ..."
    qd tu arrives a la fin de ton tabeau sur la boucle for, tu vas lire la derniere valeur du tableau +1 (qui n'existe pas ==> j'insiste )

    l'erreur ne doit pas etre bloquante, ca doit etre juste du warning , si tu ne veux pas la voir, il y a 2 solutions :
    1. enlever l'option -w de la premiere ligne (#!/usr/bin/perl -w)
    2 . arreter de lire une valeur qui n'existe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          if ($i+1< scalar @tableau)
          {
               $dessins-> ....
               ....
          }
    les fautes d'orthographe de ce texte sont sous license GPL. Merci d'informer le proprietaire de la faute en cas de modification.

Discussions similaires

  1. [2.5.2] Problème de tableaux avec des groupes
    Par Elmotardo dans le forum BIRT
    Réponses: 2
    Dernier message: 26/10/2011, 11h05
  2. Des tableaux avec des bords arrondis ?
    Par whitespirit dans le forum Word
    Réponses: 14
    Dernier message: 16/06/2011, 06h55
  3. Réponses: 8
    Dernier message: 02/12/2010, 19h39
  4. Réponses: 2
    Dernier message: 11/05/2009, 09h36
  5. Réponses: 8
    Dernier message: 20/04/2007, 15h18

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