Re: [linux] patern matching en perl : help, par où commencer ?
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 ?
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 ?
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 ?
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 ?
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 ?
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