Forum Programmation.perl Une erreur donc je ne comprend pas

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-3
12
déc.
2015

Salut a tous
j'ai encore une erreur que mon code me renvoit et je ne comprend pas la provenance etant donne que j'ai initialise le variable.

Use of uninitialized value in string ne at parvsde.pl line 154.
Use of uninitialized value in string ne at parvsde.pl line 154.
Use of uninitialized value in string ne at parvsde.pl line 154.

C:\Users\Desktop\Compare\Perl>

my ($errcode, $errtext, $param, $data);

    ($errcode, $errtext, $param) = parse_paramfile({filename =>$file1});
    if ($errcode) {
      print "ERROR: $errtext !";
      exit(1);
    }

    ($errcode, $errtext, $data) = parse_datafile({filename =>$file2});
    if ($errcode) {
      print "ERROR: $errtext !";
      exit(1);
    }

    # use Data::Dumper;
    # print Dumper($param), "\n\n", Dumper($data), "\n";
    my $Fhhtml; 

    for my $k ( keys %{$data} ) {
    if ( open( $Fhhtml, '>', "../WEBS/HTML/$k.csv" ) ) {


        $k: $param->{$k}\n";  
        for my $i ( 0 .. $#{ $data->{$k} } ) {
            if ( $param->{$k} ne $data->{$k}->[$i]->[1] ) {  # voici la ligne 154 de mon code                
print $Fhhtml "$data->{$k}->[$i]->[0]$data->{$k}->[$i]->[1]\n"; 

            }
  • # Il manque des trucs

    Posté par  . Évalué à 4.

    Il manque un bout de code, tu fermes une chaîne de caractères qui n'a jamais été ouverte $k: $param->{$k}\n". Je suppose que c'est juste au copier-coller qu'il s'est passé quelque chose.

    Eh bien l'erreur est claire, ou bien $param->{$k} ou bien $data->{$k}->[$i]->[1] n'a pas été défini. Tu est sûr que le ->[1] est bon ? (parce que $data->{$k}->[$i] existe visiblement, mais pour nous pas moyen de savoir de quoi il s'agit, même pas possible de dire que c'est une référence à un tableau). Bref, sans connaître la structure de $data, défini dans un parse_datafile dont on ne sait rien, c'est difficile de t'en dire plus.

    • [^] # Re: Il manque des trucs

      Posté par  . Évalué à -8.

      Anaseto,
      c'est comme ca que le code est c'est un bout de code mais j'ai complete la fin du code
      le probleme est que il me signale deja au paravant une erreur au niveau de la ligne 152 et 154 elle et marque

      Use of uninitialized value in concatenation <.> or string at parvsde.pl line 152
      Use of uninitialized value in string ne at parvsde.pl line 154

      my ($errcode, $errtext, $param, $data);
      
          ($errcode, $errtext, $param) = parse_paramfile({filename =>$file1});
          if ($errcode) {
            print "ERROR: $errtext !";
            exit(1);
          }
      
          ($errcode, $errtext, $data) = parse_datafile({filename =>$file2});
          if ($errcode) {
            print "ERROR: $errtext !";
            exit(1);
          }
      
          # use Data::Dumper;
          # print Dumper($param), "\n\n", Dumper($data), "\n";
          my $Fhhtml; 
      
          for my $k ( keys %{$data} ) {
          if ( open( $Fhhtml, '>', "../WEBS/HTML/$k.csv" ) ) {
      
      
             print $Fhhtml "\n<table>\n<tr><th>$k:</th><th>$param->{$k}</th></tr>\n";  #line 152
              for my $i ( 0 .. $#{ $data->{$k} } ) {
                  if ( $param->{$k} ne $data->{$k}->[$i]->[1] ) { #line 154
      
                      print $Fhhtml "<tr><td>$data->{$k}->[$i]->[0]</td><td>$data->{$k}->[$i]->[1]</td></tr>\n";  
      
                  }
              }
      
          }
          else {
              warn "FEHLER ($!) bei Datei $k.html";
          }
      }
      • [^] # Re: Il manque des trucs

        Posté par  . Évalué à 3.

        Ça veut dire que ton $param->{$k} n'est pas défini (ligne 152), donc que parse_paramfile ne fait pas ce que tu crois.

      • [^] # Re: Il manque des trucs

        Posté par  (site web personnel) . Évalué à 3.

        C'pas compliqué : $param->{$k} n'est pas définie (uninitialized value). Tu l'utilises dans une chaîne de caractères (l. 152), ce qu'il assimile à une concaténation et dans une comparaison (l. 154, le ne), et ça il aime pas, mais ce ne sont que des warnings, non ?

        Tu peux mettre $param->{$k} = '' unless (defined($param->{$k})); ligne 151 pour te débarrasser de l'erreur, mais il serait sans doute plus pertinent de comprendre pourquoi $param->{$k} n'est pas définie.

        Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

        • [^] # Re: Il manque des trucs

          Posté par  . Évalué à -9.

          Merci bien a tous la proposition de Framasky a fonctionner ce qui m'etonne est que ce code a fonctionne avec d'autre Fichier quand j'ai change les Fichiers il a commence a me renvover cette erreur.

          Comme dit j'ai aussi un autre code qui me renvoit une erreur semblable j'ai utilise la Technique de
          Framasky et je recoit ceci

          C:\Users\Desktop\Sys\Script>perl sysvsde.pl
          Global symbol "$colums1" requires explicit package name at sysvsde.pl line 97.
          Global symbol "$colums1" requires explicit package name at sysvsde.pl line 97.
          Execution of sysvsde.pl aborted due to compilation errors.

          C:\Users\Desktop\Sys\Script>

          shift @$row;
                  for my $i ( 0 .. $#{$row}-1 ) {
          
                      $colums1->{$i} = '' unless (defined($colums1->{$i}));  #line 97 
                      print $Fhhtml "<tr><td>$colums1[$i]</td><td>$row->[$i]</td><td>$data2{$colums1[$i]}</td></tr>\n";
          
                  }
                  print $Fhhtml "</table>\n</body>\n</html>";
                  close $Fhhtml or die "close($filename,w) failed: $!";
              }
          
          }
          • [^] # Re: Il manque des trucs

            Posté par  (site web personnel) . Évalué à 2.

            Va falloir que tu apprennes à te servir d'un moteur de recherche plutôt que de poser des questions aux gens.

            Tiens : https://tontonroger.org/?q=+Global+symbol++requires+explicit+package+name+at++line&category_general=on

            Pis après, tu regardes les sites qui te sont proposés.

            Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.

            • [^] # Re: Il manque des trucs

              Posté par  . Évalué à -10.

              vous ete rigolo sur ce forum, certains n'ont pas encore compris que c'est pas oblige de repondre a une question si on la trouve bete on peut bien s'abstenir, que lance les mots deplace aux gens.

              • [^] # Re: Il manque des trucs

                Posté par  (site web personnel) . Évalué à 3.

                Encore une fois, tu inverses totalement la situation. Peu importe la réaction des autres sur le forum, limite pour toi, tu t'en fiches complètement.

                En revanche, le gros problème c'est le temps hallucinant que tu perds par manque de méthodes. Ça fait 4-5 mois que tu poses des questions relativement basiques sur ce forum. Chaque fois que l'on te donne une bonne réponse ici, c'est une opportunité pour toi d'apprendre qui disparaît.

                Pour une énième fois, apprend à apprendre, ça doit devenir ta priorité. Et arrête d'envoyer pêtre les nombreuses personnes qui t'ont donné ce conseil de mille et une manière différente.

                • [^] # Re: Il manque des trucs

                  Posté par  . Évalué à -10.

                  tu as raison, je#'apprand a apprendre j'ai bien dit que ce code a fonctionne au paravant avec cettes donne
                  j'ai change les donne et les donnes sont identique au autre mais je suis surpri que cela ne marche,
                  et si bien je publi tout le code tu verras que j'ai declare la variable Colums1 plus haut donc quand quelqu'un envois des mot deplace pareil j'aurai encore attendu qu'il me dise de publie tout mon script.
                  en Programmation c'est la moindre des chose declarer au prealable une variable si l'on veut qu'elle s'affiche sur notre ecrant.

          • [^] # Re: Il manque des trucs

            Posté par  . Évalué à 5.

            ce qui m'etonne est que ce code a fonctionne avec d'autre Fichier
            […]quand j'ai change les Fichiers il a commence a me renvover cette erreur.

            bienvenu dans le monde du developpement,
            tu as ecrit un programme pour traiter un premier lot de fichier, tu as fait tes tests et tes recettes à partir de ce premier lot.

            mais tu n'as pas pris le temps d'ecrire l'algoritme de traitement, qui aurait montré qu'il y a des cas particuliers qu'il faut penser à traiter.

            • qu'est ce que je fais si la valeur que je cherche n'est pas trouvée ? (je continue, je m'arrete et je gueule une erreur, je continue silencieusement)
            • que se passe-t-il si une chaine contient des caracteres particuliers ?
            • que se passe-t-il si les arguments passés sont faux (dossier ne contenant pas de fichier) etc etc

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.