bon j'ai commencé à écrire mon petit script. ça marche bien... sauf un
truc. ci dessous un extrait du code :
...
# --- fichier a scanner
my $working_file = "test_mat.inc";
# --- ouverture du fichier
open(THISFILE,"$working_file") || die "error openning $working_file\n";
# --- analyse du fichier ouvert
my $imageName;
foreach my $line (<THISFILE>) {
if ( ($imageName)=($line =~ /jpg "(.+?)"/) ) {
# --- find where original is
find(\&finder,$startDir);
}
}
# --- fermeture du fichier
close(THISFILE);
sub finder {
return unless -f $File::Find::name;
if ($_ eq $imageName) {
copy ($File::Find::name,$destDir.$_) || die "Copy failed : $!\n";
}
}
...
bon c'est sûr, c'est sûrement perfectible pour vous.
le truc c'est que il peut y avoir plusieurs fois la même image. c'est
pas réellement un problème mais ça ralenti. copier 3 ou 4 fois une image
de 800 ko... ça allonge le temps déja grand avec le find.
j'ai lu le morceau sur le dedoublonage dans perlfaq4 mais ... disons ...
humm ... j'ai pas compris grand chose :(((
donc une petite aide de votre part serait la bienvenue !
merci
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jacques Caron
Salut,
On Wed, 21 Dec 2005 20:00:22 +0100, kurtz le pirate wrote:
le truc c'est que il peut y avoir plusieurs fois la même image. c'est pas réellement un problème mais ça ralenti. copier 3 ou 4 fois une image de 800 ko... ça allonge le temps déja grand avec le find.
j'ai lu le morceau sur le dedoublonage dans perlfaq4 mais ... disons ... humm ... j'ai pas compris grand chose :(((
Tu utilises un hash pour ça. Tu mets un hash dans un contexte qui dure pendant tout le temps de ton opération:
my %fichiers;
puis à chaque fois que tu récupères un nom de fichier:
if (!defined $fichiers{$nom_du_fichier}) { # chercher, copier, tout ça... $fichiers{$nom_du_fichier} = 1; }
Et voilà, la prochaine fois qu'il tombe sur le même fichier il sautera ça directement.
Jacques. -- Oxado http://www.oxado.com/
Salut,
On Wed, 21 Dec 2005 20:00:22 +0100, kurtz le pirate
<kurtzlepirate@yahoo.fr> wrote:
le truc c'est que il peut y avoir plusieurs fois la même image. c'est
pas réellement un problème mais ça ralenti. copier 3 ou 4 fois une image
de 800 ko... ça allonge le temps déja grand avec le find.
j'ai lu le morceau sur le dedoublonage dans perlfaq4 mais ... disons ...
humm ... j'ai pas compris grand chose :(((
Tu utilises un hash pour ça. Tu mets un hash dans un contexte qui dure
pendant tout le temps de ton opération:
my %fichiers;
puis à chaque fois que tu récupères un nom de fichier:
if (!defined $fichiers{$nom_du_fichier})
{
# chercher, copier, tout ça...
$fichiers{$nom_du_fichier} = 1;
}
Et voilà, la prochaine fois qu'il tombe sur le même fichier il sautera ça
directement.
On Wed, 21 Dec 2005 20:00:22 +0100, kurtz le pirate wrote:
le truc c'est que il peut y avoir plusieurs fois la même image. c'est pas réellement un problème mais ça ralenti. copier 3 ou 4 fois une image de 800 ko... ça allonge le temps déja grand avec le find.
j'ai lu le morceau sur le dedoublonage dans perlfaq4 mais ... disons ... humm ... j'ai pas compris grand chose :(((
Tu utilises un hash pour ça. Tu mets un hash dans un contexte qui dure pendant tout le temps de ton opération:
my %fichiers;
puis à chaque fois que tu récupères un nom de fichier:
if (!defined $fichiers{$nom_du_fichier}) { # chercher, copier, tout ça... $fichiers{$nom_du_fichier} = 1; }
Et voilà, la prochaine fois qu'il tombe sur le même fichier il sautera ça directement.
Jacques. -- Oxado http://www.oxado.com/
Jérémy JUST
On Wed, 21 Dec 2005 21:38:29 +0100 "Jacques Caron" wrote:
my %fichiers;
if (!defined $fichiers{$nom_du_fichier}) { # chercher, copier, tout ça... $fichiers{$nom_du_fichier} = 1; }
Plutôt
if (!exists $fichiers{$nom_du_fichier})
Dans ce cas présent, ça ne change pas grand chose, mais en général, utiliser « defined » sur un hash crée l'élément manquant, ce qui consomme bêtement de la mémoire (et peut avoir d'autres effets fâcheux dans la suite du code).
-- Jérémy JUST
On Wed, 21 Dec 2005 21:38:29 +0100
"Jacques Caron" <jc@oxado.com> wrote:
my %fichiers;
if (!defined $fichiers{$nom_du_fichier})
{
# chercher, copier, tout ça...
$fichiers{$nom_du_fichier} = 1;
}
Plutôt
if (!exists $fichiers{$nom_du_fichier})
Dans ce cas présent, ça ne change pas grand chose, mais en général,
utiliser « defined » sur un hash crée l'élément manquant, ce qui
consomme bêtement de la mémoire (et peut avoir d'autres effets fâcheux
dans la suite du code).
On Wed, 21 Dec 2005 21:38:29 +0100 "Jacques Caron" wrote:
my %fichiers;
if (!defined $fichiers{$nom_du_fichier}) { # chercher, copier, tout ça... $fichiers{$nom_du_fichier} = 1; }
Plutôt
if (!exists $fichiers{$nom_du_fichier})
Dans ce cas présent, ça ne change pas grand chose, mais en général, utiliser « defined » sur un hash crée l'élément manquant, ce qui consomme bêtement de la mémoire (et peut avoir d'autres effets fâcheux dans la suite du code).
-- Jérémy JUST
Jacques Caron
Salut,
On Thu, 22 Dec 2005 11:16:36 +0100, kurtz_le_pirate wrote:
$fichiers{$nom_du_fichier} = 1; ça sert à quoi ?
Ca crée une entrée dans le hash %fichiers pour la clef $nom_du_fichier (avec une valeur 1, mais ça a peu d'importance, on veut juste créer une clef).
pour moi, !exists $fichiers{$nom_du_fichier} créé une entrée dans le tableau si celui ci n'existe pas.
Non, ça teste simplement l'existence de cette clef dans le hash.
Jacques. -- Oxado http://www.oxado.com/
Salut,
On Thu, 22 Dec 2005 11:16:36 +0100, kurtz_le_pirate
<kurtzlepirate@yahoo.fr> wrote:
$fichiers{$nom_du_fichier} = 1;
ça sert à quoi ?
Ca crée une entrée dans le hash %fichiers pour la clef $nom_du_fichier
(avec une valeur 1, mais ça a peu d'importance, on veut juste créer une
clef).
pour moi, !exists $fichiers{$nom_du_fichier}
créé une entrée dans le tableau si celui ci n'existe pas.
Non, ça teste simplement l'existence de cette clef dans le hash.
On Thu, 22 Dec 2005 11:16:36 +0100, kurtz_le_pirate wrote:
$fichiers{$nom_du_fichier} = 1; ça sert à quoi ?
Ca crée une entrée dans le hash %fichiers pour la clef $nom_du_fichier (avec une valeur 1, mais ça a peu d'importance, on veut juste créer une clef).
pour moi, !exists $fichiers{$nom_du_fichier} créé une entrée dans le tableau si celui ci n'existe pas.
Non, ça teste simplement l'existence de cette clef dans le hash.
Jacques. -- Oxado http://www.oxado.com/
Jérémy JUST
On Thu, 22 Dec 2005 18:32:59 +0100 Scetbon Cyril wrote:
Dans ce cas présent, ça ne change pas grand chose, mais en général, utiliser « defined » sur un hash crée l'élément manquant Pas d'accord.
$v=undef;
Nous parlions de hashes, pas de scalaires.
Je viens effectivement de vérifier que defined() ne déclenchait pas d'autovivification. Néanmoins, il est prudent de préférer exists() pour tester l'existence d'un hash. Ça évite la confusion entre un élément non défini et un élément non existant.
-- Jérémy JUST
On Thu, 22 Dec 2005 18:32:59 +0100
Scetbon Cyril <cyril.scetbon@free.fr> wrote:
Dans ce cas présent, ça ne change pas grand chose, mais en général,
utiliser « defined » sur un hash crée l'élément manquant
Pas d'accord.
$v=undef;
Nous parlions de hashes, pas de scalaires.
Je viens effectivement de vérifier que defined() ne déclenchait pas
d'autovivification. Néanmoins, il est prudent de préférer exists() pour
tester l'existence d'un hash. Ça évite la confusion entre un élément non
défini et un élément non existant.
On Thu, 22 Dec 2005 18:32:59 +0100 Scetbon Cyril wrote:
Dans ce cas présent, ça ne change pas grand chose, mais en général, utiliser « defined » sur un hash crée l'élément manquant Pas d'accord.
$v=undef;
Nous parlions de hashes, pas de scalaires.
Je viens effectivement de vérifier que defined() ne déclenchait pas d'autovivification. Néanmoins, il est prudent de préférer exists() pour tester l'existence d'un hash. Ça évite la confusion entre un élément non défini et un élément non existant.
-- Jérémy JUST
Jacques Caron
On Thu, 22 Dec 2005 21:56:15 +0100, Jérémy JUST wrote:
Je viens effectivement de vérifier que defined() ne déclenchait pas d'autovivification.
En fait, il me semble bien que ça dépend de la version de perl... De mémoire les versions 5.0.x déclenchaient l'autovivification sur un defined (mais il faudrait vérifier, je crois que ce n'était pas au dernier niveau, mais aux niveaux précédents dans le cas d'un hash de hashes genre defined $a->{$b}{$c}, $a->{$b} était créé). Il me semble que ce n'est plus le cas depuis perl 5.6.x ou 5.8.x.
Jacques. -- Oxado http://www.oxado.com/
On Thu, 22 Dec 2005 21:56:15 +0100, Jérémy JUST
<jeremy_just@netcourrier.com> wrote:
Je viens effectivement de vérifier que defined() ne déclenchait pas
d'autovivification.
En fait, il me semble bien que ça dépend de la version de perl... De
mémoire les versions 5.0.x déclenchaient l'autovivification sur un defined
(mais il faudrait vérifier, je crois que ce n'était pas au dernier niveau,
mais aux niveaux précédents dans le cas d'un hash de hashes genre defined
$a->{$b}{$c}, $a->{$b} était créé). Il me semble que ce n'est plus le cas
depuis perl 5.6.x ou 5.8.x.
On Thu, 22 Dec 2005 21:56:15 +0100, Jérémy JUST wrote:
Je viens effectivement de vérifier que defined() ne déclenchait pas d'autovivification.
En fait, il me semble bien que ça dépend de la version de perl... De mémoire les versions 5.0.x déclenchaient l'autovivification sur un defined (mais il faudrait vérifier, je crois que ce n'était pas au dernier niveau, mais aux niveaux précédents dans le cas d'un hash de hashes genre defined $a->{$b}{$c}, $a->{$b} était créé). Il me semble que ce n'est plus le cas depuis perl 5.6.x ou 5.8.x.
Jacques. -- Oxado http://www.oxado.com/
Jérémy JUST
On Fri, 23 Dec 2005 11:32:38 +0100 "Jacques Caron" wrote:
Je viens effectivement de vérifier que defined() ne déclenchait pas d'autovivification. En fait, il me semble bien que ça dépend de la version de perl... De
mémoire les versions 5.0.x déclenchaient l'autovivification sur un defined
C'est aussi ce que je pense, mais je n'avais pas de perl < 5.6.0 sous la main quand j'ai testé.
(mais il faudrait vérifier, je crois que ce n'était pas au dernier niveau, mais aux niveaux précédents dans le cas d'un hash de hashes genre defined $a->{$b}{$c}, $a->{$b} était créé). Il me semble que ce n'est plus le cas depuis perl 5.6.x ou 5.8.x.
Je crois avoir lu dans les notes de développement de Perl 6 que le comportement général des versions 5.x était jugé incohérent, même s'il avait évolué, et que ça allait changer.
-- Jérémy JUST
On Fri, 23 Dec 2005 11:32:38 +0100
"Jacques Caron" <jc@oxado.com> wrote:
Je viens effectivement de vérifier que defined() ne déclenchait pas
d'autovivification.
En fait, il me semble bien que ça dépend de la version de perl... De
mémoire les versions 5.0.x déclenchaient l'autovivification sur un
defined
C'est aussi ce que je pense, mais je n'avais pas de perl < 5.6.0 sous la
main quand j'ai testé.
(mais il faudrait vérifier, je crois que ce n'était pas au dernier
niveau, mais aux niveaux précédents dans le cas d'un hash de
hashes genre defined $a->{$b}{$c}, $a->{$b} était créé). Il me semble
que ce n'est plus le cas depuis perl 5.6.x ou 5.8.x.
Je crois avoir lu dans les notes de développement de Perl 6 que le
comportement général des versions 5.x était jugé incohérent, même s'il
avait évolué, et que ça allait changer.
On Fri, 23 Dec 2005 11:32:38 +0100 "Jacques Caron" wrote:
Je viens effectivement de vérifier que defined() ne déclenchait pas d'autovivification. En fait, il me semble bien que ça dépend de la version de perl... De
mémoire les versions 5.0.x déclenchaient l'autovivification sur un defined
C'est aussi ce que je pense, mais je n'avais pas de perl < 5.6.0 sous la main quand j'ai testé.
(mais il faudrait vérifier, je crois que ce n'était pas au dernier niveau, mais aux niveaux précédents dans le cas d'un hash de hashes genre defined $a->{$b}{$c}, $a->{$b} était créé). Il me semble que ce n'est plus le cas depuis perl 5.6.x ou 5.8.x.
Je crois avoir lu dans les notes de développement de Perl 6 que le comportement général des versions 5.x était jugé incohérent, même s'il avait évolué, et que ça allait changer.