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

SGBD Perl Discussion :

uninitialized value in print - recup données de BDD


Sujet :

SGBD Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut uninitialized value in print - recup données de BDD
    Bonjour,

    j'ai un petit souci avec mon code. Tout fonctionne très bien sauf que mon log est tout moche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uninitialized value in print at test.pl line 680
    J'explique mon programme :

    - j'exécute une requête sur Oracle (Select ....)
    - je récupère le résultat via le fetchrow_array
    - j'écris le résultat de la requête dans un fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (my ($champ1,$champ2,...)=$req -> fetchrow_array){
        print FILE ($champ1, $champ2,...);
    }
    En bref, le principe est de descendre le contenu d'une table dans un fichier.

    J'ai constaté que le message "d'erreur" venait du fait que certaines données récupérées de la base étaient vides (donc impossible à imprimer dans un fichier ? ).
    je dis "message d'erreur" car mon fichier est correctement généré.

    Comment me débarrasser de ces messages ?

    Si quelqu'un a une idée....
    Merci !

    [/code]

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu exécutes ton script avec les commutateurs -w ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    euh... désolé mais .. c'est quoi ? :

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    -w sur le shebang
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/usr/bin/perl -w
    use strict;
    use Carp;
     
    ton script...
    ......

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    ok...

    non, je fais sans :

  6. #6
    Invité
    Invité(e)
    Par défaut
    Et y'a quoi à la ligne 680 ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    à la ligne 680, c'est l'instruction "print"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    line 679 :  while (my ($champ1,$champ2)=$req-> fetchrow_array){
    line 680:       print FILE ($champ1, $champ2);
    line 681:   }

    je pense que c'est à cause des variables qui ne contiennent rien. Ma requete étant un SELECT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ch1, ch2 FROM table
    le chp 2 peut être null... et je pense que le message "uninitialized..." apparait quand ma variable $champ2 qui est censé récupérer la valeur de ch2 est null.... mais pour la génération de mon fichier, ce n'est pas génant.

    Le pb, c'est ce message qui pourrit mon log. J'ai bien des astuces pour contourner le pb, mais ça fait un peu bricolage... et mon client est plutot tatillon la-dessus

    je me demandais si qn avait déjà eu le pb ou s'il y avait un truc PERL que je ne connais pas qui me sauverai de la torture ...

    je continue mes recherches et je vous dis quoi

  8. #8
    Invité
    Invité(e)
    Par défaut
    Et si tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print FILE ($champ1, $champ2) unless $champ2 = undef;

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    non, toujours le même message. (même pire étant donné qu'il le réaffiche à cause du "unless $champ2 = undef..."

  10. #10
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: uninitialized value in print - recup données de BDD
    Et avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (my ($champ1,$champ2,...)=$req -> fetchrow_array){
        print FILE map { if (defined($_)) { $_ } else { " " } }($champ1, $champ2,...);
    }
    :
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    Ok -
    j'ai compris d'où ça venait exactement... en fait, c'est le fait de récupérer les données dans des variables déclarées dans le "while" qui le fait râler

    donc au lieu de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while( my ($champ1, $champ2) = $req-> fetchrow_array){
         print FILE ($champ1, $champ2);
    }
    il vaut mieux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my ($champ1, $champ2);
    while ($champ1, $champ2)=$req->fetchrow_array){
       print FILE ($champ1, $champ2);
    }
    comme ça, dans tous les cas, les variables $champ1 et $champ2 existent et.... sont surement initialisées avec un truc, vu qu'apparemment, ça ralait parce que elles n'étaient pas initialisées !

    bah, c'est un peu casse pied parce que ça m'oblige à déclarer pas mal de variables....
    avant je le faisais oui... mais elles n'étaient connues que dans le while... mais là, va falloir faire gaffe au noms car j'ai en fait une vingtaine de descentes de tables à faire qui contiennent chacune une trentaine de champs.... ça risque pas de faire une surcharge ??
    m'enfin...

    merci les gars de vous être pencher sur le pb !

  12. #12
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Pourquoi ne pas récupérer le résultat de ta requête dans un vrai tableau @champs, plutot que dans une liste créée à chaque fois ($champ1, $champ2, ...) ?

    Dans le cas de l'utilisation d'un tableau, ne pas oublier de le vider (@champs=()) avant chaque nouvelle récupération
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    ouh! j'avais pas vu 2Eurocents !

    YES ! ça marche !!

    MERCI !! MERCI !! tu pas pas savoir à quel point ! on voit les gens qui maitrisent qd mm ! Messieurs (mesdames ?), chapeaux bas... 8)

    Je vais m'offrir le plaisir de rendre ce topic "Résolu"... héhé !
    Merci encore !

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    j'avais pensé aussi au tableau.. mais ça ne changeait rien quant au message lors du print... mais ta solution marche très bien ! merci !!

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

Discussions similaires

  1. [highslide-with-html] Récupération des données en BDD
    Par Invité dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 10/10/2011, 10h20
  2. [USE STRICT] uninitialized value in print ...
    Par pop_up dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2006, 15h18
  3. [langage] Use of uninitialized value
    Par Batou dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2005, 11h28
  4. [Strategie]Pb recup données grosse table
    Par zach dans le forum JDBC
    Réponses: 32
    Dernier message: 28/01/2005, 16h08
  5. Quick Report et impression de données hors BDD
    Par gRRosminet dans le forum C++Builder
    Réponses: 8
    Dernier message: 19/08/2002, 10h47

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