Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

à l'aide sur un script tres simple !!

5 réponses
Avatar
Paul
Bonjour,

j'ai un besoin assez simple, et je dois dire que j'ai d=E9j=E0 r=E9
ussi =E0 faire des choses plus dure en perl, mais l=E0, je comprend plus
rien, je panique...

Voil=E0 les 4 =E9tapes que je souhaite faire :



1. ouvrir le r=E9pertoire users1/folders/
(il contient des fichiers, tels que 1.xml, 2.xml ... ...)

2. ajouter tous les fichiers edc ce r=E9pertoire dans un hash, genre :
$hash{'user1'}{'folders'} =3D "1.xml";

3. ouvrir le r=E9pertoire users1/us/
(il contient lui aussi des fichiers .xml)

4. ajouter chacun de ces fichier dans le m=EAme hash qu'en 2.
$hash{'user1'}{'us'} =3D "1.xml";



Pouvez vous me guider ?

Pour la suite, je vais esasyer de me d=E9brouiller seul avant de demander
de l'aide..

Merci =E0 ceux qui prendront le temps de m"aider...


Paul

5 réponses

Avatar
Damien GUERIN
my $rep = "users1/folders/"

opendir (DIR, $rep);
my @files=grep (/.*.xml/,readdir(DIR));
close(DIR);

$rep =~ /^(w)*/(w)/;
my $dir1 = $1;
my dir2 = $2;
my %hash = ();
foreach my $file (@files){
$hash{$dir1}{$dir2}= $file;
}


etc.... Un truc comme ça...
Avatar
Paul
Merci, j'ai un peu adapté les regeps et àa fonctionne comme je le
souhaitait.

Le Sun, 21 Nov 2004 13:27:54 +0100
"Damien GUERIN" vous écriviez :

my $rep = "users1/folders/"

opendir (DIR, $rep);
my @files=grep (/.*.xml/,readdir(DIR));
close(DIR);

$rep =~ /^(w)*/(w)/;
my $dir1 = $1;
my dir2 = $2;
my %hash = ();
foreach my $file (@files){
$hash{$dir1}{$dir2}= $file;
}


etc.... Un truc comme ça...




Avatar
DominiX
ici même: Damien GUERIN a écrit
my $rep = "users1/folders/"

opendir (DIR, $rep);
my @files=grep (/.*.xml/,readdir(DIR));
close(DIR);

$rep =~ /^(w)*/(w)/;
my $dir1 = $1;
my dir2 = $2;
my %hash = ();


moi je mettrait :

$hash{$dir1}{$dir2}= [@files]

plutot que

foreach my $file (@files){
$hash{$dir1}{$dir2}= $file;
}



-- dominix

Avatar
Paul
Bon, j'ai beaucoup avancé dans mon script, merci encore à Damien...

mais je me pose une autre question.

en fait, dans mon dossier "users1/folders/" j'aimerais connaitre le nom
du plus grand numéro de fichier xml, en fait, ce sont des ID qu'il ne
faut pas dupliquer.

Je pensait, puisque j'ai la liste des fichiers dans mon hash, le trier,
et ensuite je prend le dernier élément (ou le premier selon l'ordre de
mon trie), puis j'ajoute +1, et j'ai mon nouvel ID...

Avez vous une autre méthode plus simple ?






Le Sun, 21 Nov 2004 11:53:35 +0100
Paul <ernond_paul_at_yahoo.fr> vous écriviez :

Bonjour,

j'ai un besoin assez simple, et je dois dire que j'ai déjà ré
ussi à faire des choses plus dure en perl, mais là, je comprend plus
rien, je panique...

Voilà les 4 étapes que je souhaite faire :



1. ouvrir le répertoire users1/folders/
(il contient des fichiers, tels que 1.xml, 2.xml ... ...)

2. ajouter tous les fichiers edc ce répertoire dans un hash, genre :
$hash{'user1'}{'folders'} = "1.xml";

3. ouvrir le répertoire users1/us/
(il contient lui aussi des fichiers .xml)

4. ajouter chacun de ces fichier dans le même hash qu'en 2.
$hash{'user1'}{'us'} = "1.xml";



Pouvez vous me guider ?

Pour la suite, je vais esasyer de me débrouiller seul avant de
demander de l'aide..

Merci à ceux qui prendront le temps de m"aider...


Paul


Avatar
Michel Rodriguez
Paul wrote:
Bon, j'ai beaucoup avancé dans mon script, merci encore à Damien...

mais je me pose une autre question.

en fait, dans mon dossier "users1/folders/" j'aimerais connaitre le nom
du plus grand numéro de fichier xml, en fait, ce sont des ID qu'il ne
faut pas dupliquer.

Je pensait, puisque j'ai la liste des fichiers dans mon hash, le trier,
et ensuite je prend le dernier élément (ou le premier selon l'ordre de
mon trie), puis j'ajoute +1, et j'ai mon nouvel ID...

Avez vous une autre méthode plus simple ?


Le module List::Util, qui doit etre dans le core (donc installe en meme
temps que Perl) a la fonction max, qui sera plus rapide et plus
explicite qu'un tri.

use List::Util 'max';
...
my $max= max keys %hash;


man List::Util te donnera la doc du module.

Meme si tu n'utilise pas le module, trouver le max se fait avec une
simple boucle, c'est donc O(N), le temps necessaire est proportionel a
la taille de la liste, alors qu'un tri est O(NlogN) (cf la doc de sort),
donc plus lent (proportionel a la taille de la liste * log( taille).

Bon, pour des petits hash ca n'a evidement pas grande importance.

--
mirod