OVH Cloud OVH Cloud

Perl/Tk Utiliser Variable dans Sub

4 réponses
Avatar
Orion93
Je suis partie du fichier (pour compter les lignes de tous les fichiers .pl
d'un dossier et donne le résultat dans le fichier result.txt) suivant:

sub recupPages
{
my $nomFic = shift;
my $result = shift;

# Récupération des lignes du fichier
open(F,$nomFic);
open(SORTIE,">> $result");
$i = 0;
while(<F>)
{
$i ++;
}
print SORTIE " $nomFic $i\n";

close F;
close SORTIE;}

my $emplacement = "e:\\Dossier_travail\\stat\\";
my $ficResultat = "e:\\result.txt";
recupPages($_, $ficResultat) for glob 'e:\\Dossier_travail\\stat\\*.pl';



Après quoi je veux intégrer une interface en Perl/Tk pour pouvoir entrer le
répertoire dans lequel on souhaite effectuer le processus compter le nbre
de ligne/fichier. Ce qui donne pour l'instant:

#!/usr/bin/perl
use Tk;
$main = new MainWindow;
$main->title("Test 1");
$libelF=$main->Label(-text=>'Chemin:')->pack();
$montantF=$main->Entry(-textvariable=>\$nomFic)->pack();
$valid=$main->Button(-text=>'Ok',-cursor=>pirate,-command=>\&recupPages)-
>pack();
$fin=$main->Button(-text=>'Fermer',-command=>sub {exit})->pack();
MainLoop();

sub recupPages
{
my $rep= ">$nomFic";
my $result = shift;
# Récupération des lignes du fichier
open(F,'$nomFic');
open(SORTIE,">> $result");
$i = 0;
while(<F>)
{
$i ++;
}
print SORTIE " $nomFic $i\n";

close F;
close SORTIE;
}
my $emplacement = $nomFic;
my $ficResultat = "e:\\result.txt";
recupPages($_, $ficResultat) for glob '$nomFic';

Mais ca fonctionne pas! A priori, il ne veut pas prendre ma donnée $nomFic
pour l'utiliser dans mon sub! Je ne comprend pas! Merci de m'orienter un
peu.



PS: Ne faites pas attention a l'aspect graphique je m'en occuperais après!
;-)
De plus pour la recherche dans toute une arbo pour l'instant j'ai mis de
coté!

4 réponses

Avatar
Paul GABORIT
À (at) 11 Feb 2004 18:00:47 GMT,
Orion93 écrivait (wrote):
Mais ca fonctionne pas! A priori, il ne veut pas prendre ma donnée $nomFic
pour l'utiliser dans mon sub! Je ne comprend pas! Merci de m'orienter un
peu.


Quand vous postez du code, faites en sorte que ce code soit valide. C'est à
dire qu'il ne génère pas de message (d'erreur ou d'avertissement). Votre
exemple actuel génère déjà le message suivant :

Unquoted string "pirate" may clash with future reserved word...

Vous devriez corriger cela.

Ensuite, placez les lignes suivantes au début de vos scripts :

use strict;
use warnings;

Puis corrigez les erreurs que vous indique perl. En particulier, apprenez à
utiliser 'our' et/ou 'my'. Lire par exemple :
<http://www.enstimac.fr/Perl/ModulesFr/Les_espaces_de_nom.html>

À partir de là, on pourra vous aider sans tout réécrire à votre place.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Orion93
Paul GABORIT wrote in
news::


À (at) 11 Feb 2004 18:00:47 GMT,
Orion93 écrivait (wrote):
Mais ca fonctionne pas! A priori, il ne veut pas prendre ma donnée
$nomFic pour l'utiliser dans mon sub! Je ne comprend pas! Merci de
m'orienter un peu.


Quand vous postez du code, faites en sorte que ce code soit valide.
...
À partir de là, on pourra vous aider sans tout réécrire à votre place.



Pour le prob du pirate l'ajout des guillemets est conseillé mais mon prob
n'est pas là. Je me suis juste amusée à mettre un curseur pour voir sa tête
et comment ça fonctionnait. Actuellement, j'ai ce type de message d'erreur:

readline() on closed filehandle F at try.pl line 22.
print() on closed filehandle SORTIE at try.pl line 26.

C'est que je ne comprend pas tous encore sur les messages d'erreurs, ça
fait que 15j que je fais du perl!


Avatar
Paul GABORIT
À (at) 15 Feb 2004 18:44:18 GMT,
Orion93 écrivait (wrote):
Actuellement, j'ai ce type de message d'erreur:

readline() on closed filehandle F at try.pl line 22.
print() on closed filehandle SORTIE at try.pl line 26.

C'est que je ne comprend pas tous encore sur les messages d'erreurs, ça
fait que 15j que je fais du perl!


Ajoutez donc la ligne suivante :

use diagnostics;

ou celle-ci :

use diagnostics -verbose;

et vous aurez des explications sur les messages d'erreurs.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Orion93
Paul GABORIT wrote in
news::

Ajoutez donc la ligne suivante :

use diagnostics;

ou celle-ci :

use diagnostics -verbose;

et vous aurez des explications sur les messages d'erreurs.



Merci j'essaye demain