-- Skill without imagination is craftsmanship and gives us many useful objects such as wickerwork picnic baskets. Imagination without skill gives us modern art. -- Tom Stoppard
Sur fr.comp.lang.perl, gniagnia disait :
Je souhaiterai recuperer dans un tableau le nom de fichier a la fin de
chaque ligne :
foreach $ftpd_line (@ftpd_lines) {
my @tmp=split(/s+/,$ftpd_line);
my @tmpfile=split(///,$tmp[6]);
push(@ftpfilesout,@tmpfile[7..$#tmpfile]);
}
Mais un probleme se pose pour les nom de fichier contenant des
espaces.
--
Skill without imagination is craftsmanship and gives us many useful
objects such as wickerwork picnic baskets. Imagination without skill
gives us modern art.
-- Tom Stoppard
-- Skill without imagination is craftsmanship and gives us many useful objects such as wickerwork picnic baskets. Imagination without skill gives us modern art. -- Tom Stoppard
Benoit Izac
Bonjour,
le 16/02/2007 à 10:24, "gniagnia" a écrit dans le message :
j'ecris un script perl qui scrute un fichier de log contenant des lignes au format suivant :
2007/02/15 17:59:22 192.168.0.12 ftpuser1 STOR 436699136 /ftp-data/ expl/data/out/region1/ftpuser1/fichier ftp de test.txt 2007/02/15 18:29:22 192.168.0.12 ftpuser1 STOR 436699136 /ftp-data/ expl/data/out/region1/ftpuser1/video.mpg
Je souhaiterai recuperer dans un tableau le nom de fichier a la fin de chaque ligne :
fichier ftp de test.txt video.mpg etc...
Pour l'instant j'ai reussi a faire cela :
foreach $ftpd_line (@ftpd_lines) { my @tmp=split(/s+/,$ftpd_line); my @tmpfile=split(///,$tmp[6]); push(@ftpfilesout,@tmpfile[7..$#tmpfile]); }
Mais un probleme se pose pour les nom de fichier contenant des espaces. En effet, mon tableau de resultat final @ftpfileout ressemble a cela :
fichier video.mpg ...
foreach (@ftpd_lines) { chomp; push(@ftpfilesout, $1) if (m:([^/]+$):); }
-- Benoit Izac
Bonjour,
le 16/02/2007 à 10:24, "gniagnia" <gniagnia@gmail.com> a écrit dans le
message <1171617846.032283.89040@t69g2000cwt.googlegroups.com> :
j'ecris un script perl qui scrute un fichier de log contenant des
lignes au format suivant :
2007/02/15 17:59:22 192.168.0.12 ftpuser1 STOR 436699136 /ftp-data/
expl/data/out/region1/ftpuser1/fichier ftp de test.txt
2007/02/15 18:29:22 192.168.0.12 ftpuser1 STOR 436699136 /ftp-data/
expl/data/out/region1/ftpuser1/video.mpg
Je souhaiterai recuperer dans un tableau le nom de fichier a la fin de
chaque ligne :
fichier ftp de test.txt
video.mpg
etc...
Pour l'instant j'ai reussi a faire cela :
foreach $ftpd_line (@ftpd_lines) {
my @tmp=split(/s+/,$ftpd_line);
my @tmpfile=split(///,$tmp[6]);
push(@ftpfilesout,@tmpfile[7..$#tmpfile]);
}
Mais un probleme se pose pour les nom de fichier contenant des
espaces.
En effet, mon tableau de resultat final @ftpfileout ressemble a cela :
fichier
video.mpg
...
foreach (@ftpd_lines) {
chomp;
push(@ftpfilesout, $1) if (m:([^/]+$):);
}
-- Skill without imagination is craftsmanship and gives us many useful objects such as wickerwork picnic baskets. Imagination without skill gives us modern art. -- Tom Stoppard
MERCI !
On 16 fév, 11:59, Jogo <j...@matabio.net> wrote:
Sur fr.comp.lang.perl, gniagnia disait :
Je souhaiterai recuperer dans un tableau le nom de fichier a la fin de
chaque ligne :
foreach $ftpd_line (@ftpd_lines) {
my @tmp=split(/s+/,$ftpd_line);
my @tmpfile=split(///,$tmp[6]);
push(@ftpfilesout,@tmpfile[7..$#tmpfile]);
}
Mais un probleme se pose pour les nom de fichier contenant des
espaces.
--
Skill without imagination is craftsmanship and gives us many useful
objects such as wickerwork picnic baskets. Imagination without skill
gives us modern art.
-- Tom Stoppard
-- Skill without imagination is craftsmanship and gives us many useful objects such as wickerwork picnic baskets. Imagination without skill gives us modern art. -- Tom Stoppard
MERCI !
Benoit Izac
Bonjour,
le 16/02/2007 à 12:26, "gniagnia" a écrit dans le message :
foreach (@ftpd_lines) { chomp; push(@ftpfilesout, $1) if (m:([^/]+$):); }
Pourriez vous m'expliquer ce que fait ce script exactement ?
Pour toutes les valeurs successives du tableau @ftp_lines, on affecte la valeur en cours à la variable spéciale « $_ ».
chomp retire la fin de ligne si elle est présente dans la variable $_.
Si la variable $_ contient un ou plusieurs caractères différents de « / » avant la fin de la chaîne, on les affecte à la variable $1 (grâce aux parenthèses) et on ajoute cette suite de caractère au tableau @ftpfilesout.
perldoc perlre
-- Benoit Izac
Bonjour,
le 16/02/2007 à 12:26, "gniagnia" <gniagnia@gmail.com> a écrit dans le
message <1171625181.524189.70030@q2g2000cwa.googlegroups.com> :
foreach (@ftpd_lines) {
chomp;
push(@ftpfilesout, $1) if (m:([^/]+$):);
}
Pourriez vous m'expliquer ce que fait ce script exactement ?
Pour toutes les valeurs successives du tableau @ftp_lines, on affecte la
valeur en cours à la variable spéciale « $_ ».
chomp retire la fin de ligne si elle est présente dans la variable $_.
Si la variable $_ contient un ou plusieurs caractères différents de
« / » avant la fin de la chaîne, on les affecte à la variable $1 (grâce
aux parenthèses) et on ajoute cette suite de caractère au tableau
@ftpfilesout.
le 16/02/2007 à 12:26, "gniagnia" a écrit dans le message :
foreach (@ftpd_lines) { chomp; push(@ftpfilesout, $1) if (m:([^/]+$):); }
Pourriez vous m'expliquer ce que fait ce script exactement ?
Pour toutes les valeurs successives du tableau @ftp_lines, on affecte la valeur en cours à la variable spéciale « $_ ».
chomp retire la fin de ligne si elle est présente dans la variable $_.
Si la variable $_ contient un ou plusieurs caractères différents de « / » avant la fin de la chaîne, on les affecte à la variable $1 (grâce aux parenthèses) et on ajoute cette suite de caractère au tableau @ftpfilesout.
perldoc perlre
-- Benoit Izac
gniagnia
Merci beaucoup pour cette explication.
Je commance a me familiariser avec les expressions regulieres....mais j'ai encore un petit pb :
Le fichier de log que je traite peux parfois contenir les lignes suivantes :
....C'est a dier une ligne qui ne contient pas de nom de fichier..... Dans ce cas, le script perl fait logiquement ce qui lui est demandé et alimente @ftpfilesout avec la valeur suivante :
15 17:46:31 192.168.0.12 ftpuser1 RETR - -
Comment faire pour que le script perl, bypass ce genre de ligne ?
Encore merci!
Merci beaucoup pour cette explication.
Je commance a me familiariser avec les expressions regulieres....mais
j'ai encore un petit pb :
Le fichier de log que je traite peux parfois contenir les lignes
suivantes :
....C'est a dier une ligne qui ne contient pas de nom de fichier.....
Dans ce cas, le script perl fait logiquement ce qui lui est demandé et
alimente @ftpfilesout avec la valeur suivante :
15 17:46:31 192.168.0.12 ftpuser1 RETR - -
Comment faire pour que le script perl, bypass ce genre de ligne ?
....C'est a dier une ligne qui ne contient pas de nom de fichier..... Dans ce cas, le script perl fait logiquement ce qui lui est demandé et alimente @ftpfilesout avec la valeur suivante :
15 17:46:31 192.168.0.12 ftpuser1 RETR - -
Comment faire pour que le script perl, bypass ce genre de ligne ?
Encore merci!
Benoit Izac
Bonjour,
le 19/02/2007 à 10:17, "gniagnia" a écrit dans le message :
Le fichier de log que je traite peux parfois contenir les lignes suivantes :
....C'est a dier une ligne qui ne contient pas de nom de fichier..... Dans ce cas, le script perl fait logiquement ce qui lui est demandé et alimente @ftpfilesout avec la valeur suivante :
15 17:46:31 192.168.0.12 ftpuser1 RETR - -
Comment faire pour que le script perl, bypass ce genre de ligne ?
Il faudrait connaître exactement les différentes sorties possibles dans les log pour écrire une telle expression. Si comme tu l'as écrit précédemment il y a toujours « STOR », tu peux faire :
push(@ftpfilesout, $1) if (m:bSTORb.*?([^/]+$):);
Je te laisse le soin de lire la documentation (qui existe aussi en français : <http://perl.enstimac.fr/>) pour comprendre cette expression et l'adapter à tes besoins réels.
-- Benoit Izac
Bonjour,
le 19/02/2007 à 10:17, "gniagnia" <gniagnia@gmail.com> a écrit dans le
message <1171876631.096504.281520@a75g2000cwd.googlegroups.com> :
Le fichier de log que je traite peux parfois contenir les lignes
suivantes :
....C'est a dier une ligne qui ne contient pas de nom de fichier.....
Dans ce cas, le script perl fait logiquement ce qui lui est demandé et
alimente @ftpfilesout avec la valeur suivante :
15 17:46:31 192.168.0.12 ftpuser1 RETR - -
Comment faire pour que le script perl, bypass ce genre de ligne ?
Il faudrait connaître exactement les différentes sorties possibles dans
les log pour écrire une telle expression. Si comme tu l'as écrit
précédemment il y a toujours « STOR », tu peux faire :
push(@ftpfilesout, $1) if (m:bSTORb.*?([^/]+$):);
Je te laisse le soin de lire la documentation (qui existe aussi en
français : <http://perl.enstimac.fr/>) pour comprendre cette expression
et l'adapter à tes besoins réels.
....C'est a dier une ligne qui ne contient pas de nom de fichier..... Dans ce cas, le script perl fait logiquement ce qui lui est demandé et alimente @ftpfilesout avec la valeur suivante :
15 17:46:31 192.168.0.12 ftpuser1 RETR - -
Comment faire pour que le script perl, bypass ce genre de ligne ?
Il faudrait connaître exactement les différentes sorties possibles dans les log pour écrire une telle expression. Si comme tu l'as écrit précédemment il y a toujours « STOR », tu peux faire :
push(@ftpfilesout, $1) if (m:bSTORb.*?([^/]+$):);
Je te laisse le soin de lire la documentation (qui existe aussi en français : <http://perl.enstimac.fr/>) pour comprendre cette expression et l'adapter à tes besoins réels.