Re: [linux] patern matching en perl : help, par où commencer ?

2005-03-31 Par sujet Rémi Letot
On Wed, 2005-03-30 at 23:03 +0200, Alain EMPAIN wrote:
 Bonjour Rémi et les autres,
 
 voici mon grain de sel à ton problème :
 
 j'apprécie la puissance des expressions régulières de perl et leur 
 efficience, mais je trouve qu'au delà d'une certaine complexité, elles 
 sont difficile à maintenir (à modifier, ou simplement à comprendre à 
 coup sûr par le suivant, n'est-ce pas Rémi ;-)

Ben oui, là non seulement je ne la comprend pas, mais je n'ai pas la
moindre idée de où commencer à chercher. Je me doutais bien que c'était
une expression régulière, mais j'en était même pas certain :-)

 De plus les cas où elles ne se comportent pas exactement comme notre 
 intuition le voudrait existent et je trouve le danger non négligeable.
 [Perl Cookbook, Pattern Matching, pp 158...]
 
 Donc je préfère par principe décomposer le problème de façon plus 
 lisible et vérifiable.
 Dans le programme de test ci-dessous, 

Ah ben voilà, même sans connaitre perl, ça j'ai compris et je peux
repartir de là.

Merci,
-- 
Rémi

___
Linux Mailing List - http://www.unixtech.be
Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux
Archives: http://www.mail-archive.com/linux@lists.unixtech.be
IRC: chat.unixtech.be:6667 - #unixtech
NNTP: news.gname.org - gmane.org.user-groups.linux.unixtech


Re: [linux] patern matching en perl : help, par où commencer ?

2005-03-31 Par sujet Rémi Letot
On Wed, 2005-03-30 at 23:36 +0200, Jérôme Fenal wrote:
 Alain EMPAIN wrote:
  Bonjour Rémi et les autres,
 Bonjour les gens aussi,
 
 ...
 
  Le motto de Perl est qu'il y a plusieurs façons de résoudre un problème, 
  mais certaines façons sont plus égales que d'autres.
 
 tu peux aussi poser ta question sur [EMAIL PROTECTED] (après t'y être 
 abonné, via http://listes.mongueurs.net).
 Tu y sera bien reçu, et tu auras une réponse à ta question, voire plus.

C'est qqchose que je compte faire un jour, perl est un incontournable,
mais pour le moment je n'ai déjà pas le temps de lire toutes les ml qui
me sont directement utiles, alors en ajouter une... 

 Pour ta question spécifique, pourquoi utiliser une expression 
 rationnelle quand un simple split /\s+/ aurait suffit ?

Aucune idée :-) C'est un script trouvé dans une archive de ml, qui
existe en plusieurs versions, dont aucune ne fonctionne avec les
firmwares actuels des téléphones et avec la version actuelle du soft
PBX. J'ai adapté tout ce que je pouvais aux conditions actuelles, en
tatonnant et en comprenant à peu près ce que ça fait, mais là j'étais
bloqué.

Merci,
-- 
Rémi

___
Linux Mailing List - http://www.unixtech.be
Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux
Archives: http://www.mail-archive.com/linux@lists.unixtech.be
IRC: chat.unixtech.be:6667 - #unixtech
NNTP: news.gname.org - gmane.org.user-groups.linux.unixtech


[linux] patern matching en perl : help, par où commencer ?

2005-03-30 Par sujet Rémi Letot
Hello,

pour le background de l'affaire, il faut savoir que je ne suis pas un
programmeur, et encore moins en perl :-) J'ai trouvé un petit script
perl qui me permet de rebooter à distance des téléphones IP que
j'utilise. Ce script ne fonctionnait pas, et j'ai fini par isoler la
portion du code qui ne fait pas ce qu'elle doit :

if ( $testline =~ m{\s+(.*?)\/.*$_[0].*}i ) {
$extension = $1;

Ce bout de code est dans une procédure qui prend l'adresse ip du
téléphone en argument, et les testline sont du format suivant : 

poly1/poly1  192.168.50.31D  255.255.255.255  5060
Unmonitored

Dans cet exemple, le paramètre passé à la procédure est 192.168.50.31,
et extension en sortie doit valoir poly1.

Visiblement la condition if n'est jamais validée (j'ai placé un print
dedans qui ne passe jamais), mais je n'ai pas la moindre idée de ce que
représente ce patern, et encore moins de comment aborder ce truc.
Quelqu'un peut m'aider ou me mettre dans la bonne direction ?

Merci,
-- 
Rémi

___
Linux Mailing List - http://www.unixtech.be
Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux
Archives: http://www.mail-archive.com/linux@lists.unixtech.be
IRC: chat.unixtech.be:6667 - #unixtech
NNTP: news.gname.org - gmane.org.user-groups.linux.unixtech


Re: [linux] patern matching en perl : help, par où commencer ?

2005-03-30 Par sujet Christophe Monniez
J'ai fait ce petit script et ça passe :

#!/usr/bin/perl -w
$ip=192.168.50.31;
while ()
{
if ( $_ =~ m{\s+(.*?).*$ip.*}i )
{
print It works\n;
}
}

Nommer le script essai.pl et lancer la commande :
#echo poly1/poly1  192.168.50.31D  255.255.255.255
5060 Unmonitored | ./essai.pl

On dirait que le problème vient de la détection du slash.


Le mercredi 30 mars 2005 à 18:28 +0200, Rémi Letot a écrit :
 Hello,
 
 pour le background de l'affaire, il faut savoir que je ne suis pas un
 programmeur, et encore moins en perl :-) J'ai trouvé un petit script
 perl qui me permet de rebooter à distance des téléphones IP que
 j'utilise. Ce script ne fonctionnait pas, et j'ai fini par isoler la
 portion du code qui ne fait pas ce qu'elle doit :
 
 if ( $testline =~ m{\s+(.*?)\/.*$_[0].*}i ) {
 $extension = $1;
 
 Ce bout de code est dans une procédure qui prend l'adresse ip du
 téléphone en argument, et les testline sont du format suivant : 
 
 poly1/poly1  192.168.50.31D  255.255.255.255  5060
 Unmonitored
 
 Dans cet exemple, le paramètre passé à la procédure est 192.168.50.31,
 et extension en sortie doit valoir poly1.
 
 Visiblement la condition if n'est jamais validée (j'ai placé un print
 dedans qui ne passe jamais), mais je n'ai pas la moindre idée de ce que
 représente ce patern, et encore moins de comment aborder ce truc.
 Quelqu'un peut m'aider ou me mettre dans la bonne direction ?
 
 Merci,
--
Christophe Monniez [EMAIL PROTECTED] or [EMAIL PROTECTED]
Web site : http://www.d-fence.be

#cat /dev/mouth | grep ^[[:truth:]]
Of course, the best way to get accurate information on Usenet is to
post something wrong and wait for corrections
-- Matthew Austern --

___
Linux Mailing List - http://www.unixtech.be
Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux
Archives: http://www.mail-archive.com/linux@lists.unixtech.be
IRC: chat.unixtech.be:6667 - #unixtech
NNTP: news.gname.org - gmane.org.user-groups.linux.unixtech


Re: [linux] patern matching en perl : help, par où commencer ?

2005-03-30 Par sujet Alain EMPAIN
Bonjour Rémi et les autres,
voici mon grain de sel à ton problème :
j'apprécie la puissance des expressions régulières de perl et leur 
efficience, mais je trouve qu'au delà d'une certaine complexité, elles 
sont difficile à maintenir (à modifier, ou simplement à comprendre à 
coup sûr par le suivant, n'est-ce pas Rémi ;-)

De plus les cas où elles ne se comportent pas exactement comme notre 
intuition le voudrait existent et je trouve le danger non négligeable.
[Perl Cookbook, Pattern Matching, pp 158...]

Donc je préfère par principe décomposer le problème de façon plus 
lisible et vérifiable.
Dans le programme de test ci-dessous, j'ai utilisé une variante de split 
qui n'utilise pas un pattern /xxx/ mais tout simplement   : c'est un 
cas particulier qui veut simplement reproduire ce que bash fait si bien 
: splitter la ligne de commande de façon intuiteve entre 'blancs' (un ou 
plusieurs espaces ou tabs).

Le motto de Perl est qu'il y a plusieurs façons de résoudre un problème, 
mais certaines façons sont plus égales que d'autres.

Bons essais,
Alain
#!/usr/bin/perl
# -
# A.Empain, test for Rémi
# usage : cat tel.lst | tel IP
# or: tel IP tel.lst
# -
my $IP=shift(@ARGV);
while() {
  chomp;
  my $line=$_;
  if ( $line =~ /$IP/ ) {
  # split( ... is a special case, splitting like within a shell
  # command line, using space(s) or tab(s) as delimiters
  my @FIELD=split( ,$line);
  if ( $FIELD[1] eq $IP ) {
  print == Found : $FIELD[0]\n;
  }
  else  {
  print Bad match within $line\n;
  }
  }
  else {
  print No match : $line\n;
  }
}
# -
tel.lst
# -
poly1/poly   1192.168.50.31 D   255.255.255.255 5060Unmonitored
poly1/truc   D 1192.168.50.31   255.255.255.255 5060Unmonitored
poly1/machin   1192.168.50.33   D   255.255.255.255 5060 Unmonitored
poly1/chose   1192.168.50.34D   255.255.255.255 5060 Unmonitored
# ---
Commande   ./tel 1192.168.50.31 tel.lst
# ---
== Found : poly1/poly
Bad match within poly1/truc   D 1192.168.50.31  (...)
No match : poly1/machin   1192.168.50.33   D (...)
No match : poly1/chose   1192.168.50.34D (...)

Rémi Letot wrote:
Hello,
pour le background de l'affaire, il faut savoir que je ne suis pas un
programmeur, et encore moins en perl :-) J'ai trouvé un petit script
perl qui me permet de rebooter à distance des téléphones IP que
j'utilise. Ce script ne fonctionnait pas, et j'ai fini par isoler la
portion du code qui ne fait pas ce qu'elle doit :
if ( $testline =~ m{\s+(.*?)\/.*$_[0].*}i ) {
$extension = $1;
Ce bout de code est dans une procédure qui prend l'adresse ip du
téléphone en argument, et les testline sont du format suivant : 

poly1/poly1  192.168.50.31D  255.255.255.255  5060
Unmonitored
Dans cet exemple, le paramètre passé à la procédure est 192.168.50.31,
et extension en sortie doit valoir poly1.
Visiblement la condition if n'est jamais validée (j'ai placé un print
dedans qui ne passe jamais), mais je n'ai pas la moindre idée de ce que
représente ce patern, et encore moins de comment aborder ce truc.
Quelqu'un peut m'aider ou me mettre dans la bonne direction ?
Merci,
--

Dr Alain EMPAIN  [EMAIL PROTECTED] [EMAIL PROTECTED]
  Bioinformatics, Molecular Genetics,
  Fac. Med. Vet., University of LIEGEe, Belgium
  Bd de Colonster, B43   B-4000 LIEGEe (Sart-Tilman)
WORK: +32 4 366 4159 FAX: +32 4 366 4122
HOME: rue des Martyrs,7  B- 4550 Nandrin
  +32 85 51 2341 GSM: +32 497 70 1764
---
What's your favorite Linux program?
  That's like asking a poet what his favorite word is;
  it's all in how they go together.
(Michael Stutz, author of The Linux Cookbook)
---
___
Linux Mailing List - http://www.unixtech.be
Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux
Archives: http://www.mail-archive.com/linux@lists.unixtech.be
IRC: chat.unixtech.be:6667 - #unixtech
NNTP: news.gname.org - gmane.org.user-groups.linux.unixtech


Re: [linux] patern matching en perl : help, par où commencer ?

2005-03-30 Par sujet Jérôme Fenal
Alain EMPAIN wrote:
Bonjour Rémi et les autres,
Bonjour les gens aussi,
...
Le motto de Perl est qu'il y a plusieurs façons de résoudre un problème, 
mais certaines façons sont plus égales que d'autres.
tu peux aussi poser ta question sur [EMAIL PROTECTED] (après t'y être 
abonné, via http://listes.mongueurs.net).
Tu y sera bien reçu, et tu auras une réponse à ta question, voire plus.

Pour ta question spécifique, pourquoi utiliser une expression 
rationnelle quand un simple split /\s+/ aurait suffit ?

Cdt,
J.
--
$A+=3%2?1:0;
Jérôme Fenal - jfenalml AT free.fr
___
Linux Mailing List - http://www.unixtech.be
Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux
Archives: http://www.mail-archive.com/linux@lists.unixtech.be
IRC: chat.unixtech.be:6667 - #unixtech
NNTP: news.gname.org - gmane.org.user-groups.linux.unixtech