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 :

Use of uninitialized value


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 25
    Points
    25
    Par défaut Use of uninitialized value
    Salut

    Je debute en programmation Perl. J'ai telecharge sur un site le script Spreadsheet::Read (http://search.cpan.org/~hmbrand/Spre...d-0.19/Read.pm), qui permet de recuperer les valeurs contenues dans une feuille de calcul faite dans un tableur tel que Gnumeric.
    J'ai tape pour mon projet le script suivant:
    my $input = shift(@ARGV); #je recuperer le path de ma feuille de calcul
    my $spreadsheet = ReadData ("$input"); #je la lis et la place dans la variable spreadsheet
    my $data = $spreadsheet->[1]{A5}; #je recupere la valeur de la cellule A5 dans la premiere feuille de calcul et la place dans la variable data
    print "$data"; #j'affiche data pour voir si ca marche

    J'ai donc le message d'erreur "Use of uninitialized value in concatenation (.) or string at ... ". En lisant le forum, j'ai compris que le probleme venait de certaines cases vides presentes dans ma feuille de calcul, et qu'il faut par consequent y placer une valeur par defaut.
    Comment puis je faire cela ?
    Aussi, est ce que Spreadsheet::Read est ideal pour ce que je souhaite faire ?

    Merci.
    Djahny.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 25
    Points
    25
    Par défaut Use of uninitialized value
    Re-Salut,
    J'ai depose une question il y a quelques heures. N'ayant pas recu de reponse (ce n'est pas une question d'impatience, nullement !!! ), je me demandais si ma question etait stupide, incomprehensible, ou non valable dans ce forum; comme je l'ai precise, je debute dans ce langage, par consequent j'avoue ne pas avoir "les bons reflexes". Si ce n'est pas une bonne question (stupide, incomprehensible, ou non valable), j'aimerais si possible que me le fasse savoir .
    Au sujet de mon probleme, je ne sais pas vraiment si la solution reside dans l'application de valeurs par defaut. Peut etre est ce moi qui utilise mal le Spreadsheet::Read. Si c'est le cas, j'attend vos lumieres ...

    Merci.
    Djahny.

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 585
    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 585
    Points : 2 033
    Points
    2 033
    Par défaut
    Le message d'erreur que tu as (grâce au flag -w) laisse supposer fortement que le programme doive concaténer 2 valeurs et qu'au moins l'une d'entre elle est vide (ou undef d'ailleurs).

    C'est une bonne idée que d'activer ce flag (bien que d'autres préfèrent nettement l'emploi de use warnings, ça te permet de voir les petits bémols dans ton programme

  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
    Au sujet de mon probleme, je ne sais pas vraiment si la solution reside dans l'application de valeurs par defaut. Peut etre est ce moi qui utilise mal le Spreadsheet::Read. Si c'est le cas, j'attend vos lumieres ...
    Tout dépend de ce que tu veux faire, mais ce qui est certain, c'est que ta lecture de case devrait plutôt ressembler à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if( defined( my $data = $spreadsheet->[1]{A5} ) ) { 
      print "$data"; 
    } else {
      print "< >"; # ou une alternative raisonnable
    }
    Maintenant tout dépend de ce que tu veux faire, ce que tu ne nous as toujours pas dit !!

    C'est une bonne idée que d'activer ce flag (bien que d'autres préfèrent nettement l'emploi de use warnings, ça te permet de voir les petits bémols dans ton programme
    L'avantage du pragma c'est qu'il est à portée lexicale, en plus tu peux lui spécifier précisément quel type de warnings tu veux voir, ou ne plus voir, ce qui peut être utile.
    Par exemple si on lit une série de valeurs dont on sait que certaines vont être undef, mais qu'on veut simplement que rien ne soit affiché pour une valeur undef (comportement par défaut de undef en contexte de string, on peut mettre ça dans un bloc avec "no warnings qw(uninitialized);".

    --
    Jedaï

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Dabord, je vous remercie de m'avoir repondu.
    Je vais dans un premier temps preciser ce que je souhaite faire. Je travaille actuellement sur une etude qui fait intervenir un certain nombre de sujets, de personnes. Pour un meilleure gestion, j'ai choisi d'enumerer ceux ci dans un tableau (facile a faire par n'importe qui) en y repertoriant diverses caracteristiques (en somme, un ligne pour un sujet, une colonne pour une caracteristique; la premiere colonne regroupe bien entendu le nom des sujets). En consequence, je souhaite recuperer de maniere precise les informations du tableau pour les utiliser.
    La solution proposee par Jedai est elle tjrs valable ?
    De plus, j'ai utilise "print", juste pour verifier que le Spreadsheet::Read recuperait la valeur souhaitee. Mais je ne desire pas afficher le resultat, par conséquent, que mettre dans le "else { }" ? Si je ne met rien, vais je me retrouver dans la meme situation ?

    Djahny.

  6. #6
    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
    Le problème est de savoir s'il y a une bonne valeur par défaut et si cette valeur dépend de la colonne. Et également ce que tu veux faire de ces valeurs : les additionner, les afficher, les stocker dans un fichier CSV ? Il est même possible que tu n'ais pas besoin de valeurs par défaut autre qu'undef, qui se comporte en contexte numérique comme 0 et en contexte de string comme '' (la chaîne vide).

    Une lecture de colonne pourrait donner quelque chose comme cela :
    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
    my @subjects;
    # les noms de sujets sont à partir de la seconde ligne ?
    # en supposant que la première ligne soit réservée aux entêtes de colonnes ?
    foreach my $row (2..1000000) { # maximum 1000000 de sujets ?
      my $cell = $spreadsheet->[1]{"A$row"};
      last unless defined $cell;
      push @subjects, $cell;
    }
     
    my %data;
    # première colonne : nombre d'enfants des parents, défaut 1, minimum 1
    foreach my $row (2..(@subjects + 1)) {
      my $cell = $spreadsheet->[1]{"B$row"} || 1;
      $data{$subjects[$row-2]}{enfants_des_parents} = $cell;
    }
    Ceci n'est qu'un exemple. Sans avoir plus d'information sur la façon dont ton tableau est formaté et la nature des informations à l'intérieur (tout ceci peut bien sûr être confidentiel, encore qu'habituellement ce soient les données qui sont confidentielles, pas leur nature, sauf dans certains secteurs "particuliers" de l'économie du travail), je ne peux pas t'en dire plus.

    --
    Jedaï

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 25
    Points
    25
    Par défaut
    En fait, ce sont de simples donnees (pardon de ne pas avoir ete plus clair). Il y a simplement des identifiants (relatifs aux sujets), des noms d'etude, des chiffres (relatifs a l'etude). Il n'y a aucun calcul, aucune formule. J'utilise la feuille de calcul pour y entrer les donnees. Peut n'est ce pas le meilleur choix, j'avoue mais c'est la premiere idee qui m'est venue.
    Normalement, tous les champs correspondant aux sujets sont completes. Je desire recuperer les donnees relatifs aux sujets soit pour en faire des calculs statistiques, ou pour reperer dans un autre repertoire des images (issu d'un imageur medical) que je traite par la suite.
    Voila tout.

    Djahny.

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

Discussions similaires

  1. Use of uninitialized value in pattern match (m//)
    Par Vladkergan dans le forum Langage
    Réponses: 4
    Dernier message: 13/01/2008, 19h25
  2. Use of uninitialized value in pattern match(m//)
    Par hayaet dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2007, 11h45
  3. Use of uninitialized value in string ne at
    Par Gad29 dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 09/05/2007, 13h49
  4. [USE STRICT] uninitialized value in print ...
    Par pop_up dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2006, 14h18
  5. [langage] Use of uninitialized value
    Par Batou dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2005, 10h28

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