From patrice.karatchentzeff at gmail.com Mon Mar 13 10:07:01 2017 From: patrice.karatchentzeff at gmail.com (Patrice Karatchentzeff) Date: Mon, 13 Mar 2017 10:07:01 +0100 Subject: [Perl] =?utf-8?q?Port_s=C3=A9rie=2C_Device=3A=3ASerialPort=3B_et_?= =?utf-8?q?STDOUT?= Message-ID: Salut les mongueurs J'ai un petit souci avec une redirection sur la sortie standard en jouant avec les ports série. Le but de la manipulation est de récupérer les données d'un appareil de mesure branché sur un port série (USB en fait). Voici un extrait crash-test du programme. Pour ceux qui veulent tester tout, voici un exemple sous Linux (pour Windows, il n'est pas encore prêt pour le desktop à mon dernier test de décembre 2016 ?) : # Créer une liaison de ports série virtuels : % socat -d -d pty,raw,echo=0 pty,raw,echo=0 2017/03/13 09:36:06 socat[29169] N PTY is /dev/pts/7 2017/03/13 09:36:06 socat[29169] N PTY is /dev/pts/8 2017/03/13 09:36:06 socat[29169] N starting data transfer loop with FDs [5,5] and [7,7] # Lancement de mon scrit % ./getserial.pl /dev/pts/8 # envoi de données dans le port série % echo coucou >| /dev/pts/7 # ce qui se passe en sortie de mon programme: % ./getserial.pl /dev/pts/8 Debug level: /dev/pts/8 = 0 at ./getserial.pl line 36. Data Bit Options: none odd evencoucou coucou coucou etc. Maintenant, si je veux rediriger la sortie de mon programme *en externe *: % ./getserial.pl /dev/pts/8 >>| toto.txt Le fichier ne se remplit pas... Je ne comprends pas pourquoi... Voici le programme simplifié : % cat getserial.pl #!/usr/bin/perl use strict; use warnings; use English; use Device::SerialPort; my $port = Device::SerialPort->new("$ARGV[0]") or die "can't open port: $OS_ERROR\n"; $port->baudrate(115200); # Configure this to match your device #$port->baudrate(19200); # Configure this to match your device $port->databits(8); $port->parity("odd"); $port->stopbits(1); $port->handshake('on'); #$port->handshake("xoff"); $port->buffers(4096, 4096); $port->stty_icrnl(1) || die "failed setting convert cr to new line"; $port->user_msg(1); # misc. warnings $port->error_msg(1); # hardware and data errors $port->debug(1); # debug on at 0, 1 otherwise #$port->read_const_time(500); # const time for read (milliseconds) $port->read_char_time(0); $port->write_settings; # print port configuration my @data_opt = $port->parity; # list context print "\nData Bit Options: "; foreach $a (@data_opt) { print " $a"; } # begin reading serial port #$port->write("\nBegin perl serial listener\n"); while (1) { my $char = $port->lookfor(); if ($char) { print "$char\n"; } # $port->lookclear; # needed to prevent blocking } ?Any help welcome ? Merci PK? -- |\ _,,,---,,_ Patrice KARATCHENTZEFF ZZZzz /,`.-'`' -. ;-;;,_ mailto:patrice.karatchentzeff at gmail.com |,4- ) )-,_. ,\ ( `'-' http://p.karatchentzeff.free.fr '---''(_/--' `-'\_) -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From patrice.karatchentzeff at gmail.com Thu Mar 16 14:08:08 2017 From: patrice.karatchentzeff at gmail.com (Patrice Karatchentzeff) Date: Thu, 16 Mar 2017 14:08:08 +0100 Subject: [Perl] =?utf-8?q?Port_s=C3=A9rie=2C_Device=3A=3ASerialPort=3B_et_?= =?utf-8?q?STDOUT?= In-Reply-To: References: Message-ID: Re moi, J'ai avancé un peu... En fait, j'ai l'impression que le module Device::SerialPort; redéfinit beaucoup de choses... Je n'arrive pas non plus à écrire dans un fichier par exemple ! Je n'ai rien lu - ou pas compris - si la doc du module en parlait... Quelqu'un a-t-il une idée comment contourner ? Merci PK 2017-03-13 10:07 GMT+01:00 Patrice Karatchentzeff < patrice.karatchentzeff at gmail.com>: > Salut les mongueurs > > J'ai un petit souci avec une redirection sur la sortie standard en jouant > avec les ports série. Le but de la manipulation est de récupérer les > données d'un appareil de mesure branché sur un port série (USB en fait). > > Voici un extrait crash-test du programme. > > Pour ceux qui veulent tester tout, voici un exemple sous Linux (pour > Windows, il n'est pas encore prêt pour le desktop à mon dernier test de > décembre 2016 ?) : > > # Créer une liaison de ports série virtuels : > % socat -d -d pty,raw,echo=0 pty,raw,echo=0 > 2017/03/13 09:36:06 socat[29169] N PTY is /dev/pts/7 > 2017/03/13 09:36:06 socat[29169] N PTY is /dev/pts/8 > 2017/03/13 09:36:06 socat[29169] N starting data transfer loop with FDs > [5,5] and [7,7] > > # Lancement de mon scrit > % ./getserial.pl /dev/pts/8 > > # envoi de données dans le port série > % echo coucou >| /dev/pts/7 > > # ce qui se passe en sortie de mon programme: > % ./getserial.pl /dev/pts/8 > Debug level: /dev/pts/8 = 0 at ./getserial.pl line 36. > > Data Bit Options: none odd evencoucou > coucou > coucou > > etc. > > Maintenant, si je veux rediriger la sortie de mon programme *en externe *: > > % ./getserial.pl /dev/pts/8 >>| toto.txt > > Le fichier ne se remplit pas... > > Je ne comprends pas pourquoi... > > Voici le programme simplifié : > > % cat getserial.pl > #!/usr/bin/perl > > use strict; > use warnings; > use English; > > use Device::SerialPort; > my $port = Device::SerialPort->new("$ARGV[0]") > or die "can't open port: $OS_ERROR\n"; > > > $port->baudrate(115200); # Configure this to match your device > #$port->baudrate(19200); # Configure this to match your device > $port->databits(8); > $port->parity("odd"); > $port->stopbits(1); > $port->handshake('on'); > #$port->handshake("xoff"); > $port->buffers(4096, 4096); > $port->stty_icrnl(1) || die "failed setting convert cr to new line"; > $port->user_msg(1); # misc. warnings > $port->error_msg(1); # hardware and data errors > $port->debug(1); # debug on at 0, 1 otherwise > #$port->read_const_time(500); # const time for read (milliseconds) > $port->read_char_time(0); > $port->write_settings; > > # print port configuration > my @data_opt = $port->parity; # list context > print "\nData Bit Options: "; > foreach $a (@data_opt) { print " $a"; } > > # begin reading serial port > #$port->write("\nBegin perl serial listener\n"); > > while (1) { > my $char = $port->lookfor(); > if ($char) { > print "$char\n"; > } > # $port->lookclear; # needed to prevent blocking > } > > ?Any help welcome ? > > Merci > > PK? > > > -- > |\ _,,,---,,_ Patrice KARATCHENTZEFF > ZZZzz /,`.-'`' -. ;-;;,_ mailto:patrice.karatchentzeff at gmail.com > |,4- ) )-,_. ,\ ( `'-' http://p.karatchentzeff.free.fr > '---''(_/--' `-'\_) > -- |\ _,,,---,,_ Patrice KARATCHENTZEFF ZZZzz /,`.-'`' -. ;-;;,_ mailto:patrice.karatchentzeff at gmail.com |,4- ) )-,_. ,\ ( `'-' http://p.karatchentzeff.free.fr '---''(_/--' `-'\_) -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From patrice.karatchentzeff at gmail.com Thu Mar 16 14:11:41 2017 From: patrice.karatchentzeff at gmail.com (Patrice Karatchentzeff) Date: Thu, 16 Mar 2017 14:11:41 +0100 Subject: [Perl] =?utf-8?q?Port_s=C3=A9rie=2C_Device=3A=3ASerialPort=3B_et_?= =?utf-8?q?STDOUT?= In-Reply-To: References: Message-ID: Avec le nouveau script, c'est mieux :-) (c'est du crash : ne faîtes pas trop attention au style) #!/usr/bin/perl use strict; use warnings; use English; # For Linux # do apt install libdevice-serialport-perl in Debian before ! # for testting, do apt install socat # socat -d -d pty,raw,echo=0 pty,raw,echo=0 # depending of this previsous screen out, do # ./getserial.pl /dev/pts/12 9600 60 toto.txt # echo coucou > /dev/pts/11 # usage(); my $line = "$ARGV[0]"; my $baud = "$ARGV[1]"; my $runtime = "$ARGV[2]"; my $file = "$ARGV[3]"; my $fh; # open saved data file open $fh, '>', $file or die "can't open file: $OS_ERROR\n"; print $fh "test0\n"; # manage serial port use Device::SerialPort; my $port = Device::SerialPort->new("$line") or die "can't open port: $OS_ERROR\n"; # For Windows. You only need one or the other. # Uncomment these for Windows and comment out above #use Win32::SerialPort; #my $port = Win32::SerialPort->new("COM3"); # manage serial port # only baudrate is managed from the external line $port->baudrate($baud); # Configure this to match your device $port->databits(8); $port->parity("odd"); $port->stopbits(1); $port->handshake('on'); #$port->handshake("xoff"); $port->buffers(4096, 4096); $port->stty_icrnl(1) || die "failed setting convert cr to new line"; $port->user_msg(1); # misc. warnings $port->error_msg(1); # hardware and data errors $port->debug(1); # debug on at 0, 1 otherwise #$port->read_const_time(500); # const time for read (milliseconds) $port->read_char_time(0); $port->write_settings; print $fh "test1\n"; # print configuration my @data_opt = $port->parity; # list context print "\nData Bit Options: "; foreach $a (@data_opt) { print " $a"; }; print "\n$line $baud $runtime $file\n"; # begin reading serial port #$port->write("\nBegin perl serial listener\n"); print $fh "test2\n"; while (1) { my $char = $port->lookfor(); # my $char = $port->read(255); if ($char) { print $fh "testFH\n"; print STDOUT "testSTDOUT\n"; print "$char\n"; $port->write("\ntest02"); } # $port->lookclear; # needed to prevent blocking } close $fh; close $port; sub usage { if ( $#ARGV ne "3" ) { print "usage :\n"; print " getserial.pl port speed runtime file\n"; print " where : port = serial port\n"; print " seed = port speed (in bauds)\n"; print " runtime = runtime of the measure (in seconds)\n"; print " file = data saved file\n"; exit; } } Le 16 mars 2017 à 14:08, Patrice Karatchentzeff < patrice.karatchentzeff at gmail.com> a écrit : > Re moi, > > J'ai avancé un peu... En fait, j'ai l'impression que le module Device::SerialPort; > redéfinit beaucoup de choses... > > Je n'arrive pas non plus à écrire dans un fichier par exemple ! > > Je n'ai rien lu - ou pas compris - si la doc du module en parlait... > > Quelqu'un a-t-il une idée comment contourner ? > > Merci > > PK > > 2017-03-13 10:07 GMT+01:00 Patrice Karatchentzeff < > patrice.karatchentzeff at gmail.com>: > >> Salut les mongueurs >> >> J'ai un petit souci avec une redirection sur la sortie standard en jouant >> avec les ports série. Le but de la manipulation est de récupérer les >> données d'un appareil de mesure branché sur un port série (USB en fait). >> >> Voici un extrait crash-test du programme. >> >> Pour ceux qui veulent tester tout, voici un exemple sous Linux (pour >> Windows, il n'est pas encore prêt pour le desktop à mon dernier test de >> décembre 2016 ?) : >> >> # Créer une liaison de ports série virtuels : >> % socat -d -d pty,raw,echo=0 pty,raw,echo=0 >> 2017/03/13 09:36:06 socat[29169] N PTY is /dev/pts/7 >> 2017/03/13 09:36:06 socat[29169] N PTY is /dev/pts/8 >> 2017/03/13 09:36:06 socat[29169] N starting data transfer loop with FDs >> [5,5] and [7,7] >> >> # Lancement de mon scrit >> % ./getserial.pl /dev/pts/8 >> >> # envoi de données dans le port série >> % echo coucou >| /dev/pts/7 >> >> # ce qui se passe en sortie de mon programme: >> % ./getserial.pl /dev/pts/8 >> Debug level: /dev/pts/8 = 0 at ./getserial.pl line 36. >> >> Data Bit Options: none odd evencoucou >> coucou >> coucou >> >> etc. >> >> Maintenant, si je veux rediriger la sortie de mon programme *en externe * >> : >> >> % ./getserial.pl /dev/pts/8 >>| toto.txt >> >> Le fichier ne se remplit pas... >> >> Je ne comprends pas pourquoi... >> >> Voici le programme simplifié : >> >> % cat getserial.pl >> #!/usr/bin/perl >> >> use strict; >> use warnings; >> use English; >> >> use Device::SerialPort; >> my $port = Device::SerialPort->new("$ARGV[0]") >> or die "can't open port: $OS_ERROR\n"; >> >> >> $port->baudrate(115200); # Configure this to match your device >> #$port->baudrate(19200); # Configure this to match your device >> $port->databits(8); >> $port->parity("odd"); >> $port->stopbits(1); >> $port->handshake('on'); >> #$port->handshake("xoff"); >> $port->buffers(4096, 4096); >> $port->stty_icrnl(1) || die "failed setting convert cr to new line"; >> $port->user_msg(1); # misc. warnings >> $port->error_msg(1); # hardware and data errors >> $port->debug(1); # debug on at 0, 1 otherwise >> #$port->read_const_time(500); # const time for read (milliseconds) >> $port->read_char_time(0); >> $port->write_settings; >> >> # print port configuration >> my @data_opt = $port->parity; # list context >> print "\nData Bit Options: "; >> foreach $a (@data_opt) { print " $a"; } >> >> # begin reading serial port >> #$port->write("\nBegin perl serial listener\n"); >> >> while (1) { >> my $char = $port->lookfor(); >> if ($char) { >> print "$char\n"; >> } >> # $port->lookclear; # needed to prevent blocking >> } >> >> ?Any help welcome ? >> >> Merci >> >> PK? >> >> >> -- >> |\ _,,,---,,_ Patrice KARATCHENTZEFF >> ZZZzz /,`.-'`' -. ;-;;,_ mailto:patrice.karatchentzeff at gmail.com >> |,4- ) )-,_. ,\ ( `'-' http://p.karatchentzeff.free.fr >> '---''(_/--' `-'\_) >> > > > > -- > |\ _,,,---,,_ Patrice KARATCHENTZEFF > ZZZzz /,`.-'`' -. ;-;;,_ mailto:patrice.karatchentzeff at gmail.com > |,4- ) )-,_. ,\ ( `'-' http://p.karatchentzeff.free.fr > '---''(_/--' `-'\_) > -- |\ _,,,---,,_ Patrice KARATCHENTZEFF ZZZzz /,`.-'`' -. ;-;;,_ mailto:patrice.karatchentzeff at gmail.com |,4- ) )-,_. ,\ ( `'-' http://p.karatchentzeff.free.fr '---''(_/--' `-'\_) -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From d.minix at gmail.com Tue Mar 21 09:37:04 2017 From: d.minix at gmail.com (Dominique) Date: Mon, 20 Mar 2017 22:37:04 -1000 Subject: [Perl] perl6 2017-03 ne compile pas chez moi Message-ID: Apres qq galère avec rakudobrew j'ai pus m'en sortir avec rakudobrew nuke moar rakudobrew build moar et là c'est reparti. Sinon je plantait sur une erreur de 3rdparty/libtommath voila, si ca peux aider qq, ou si il y a des explication de votre coté pour cette galere car jusqu'à present les upgrade se faisait sans soucis, merci de commenter. en revanche j'ai perdu tout les modules installés, donc je refait l'inventaire des install. a ce propos j'ai besoin de POE ça existe sous perl6 ? -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From xmltwig at gmail.com Tue Mar 21 16:10:00 2017 From: xmltwig at gmail.com (mirod) Date: Tue, 21 Mar 2017 16:10:00 +0100 Subject: [Perl] =?utf-8?q?Trier_des_noms_par_ordre_alphab=C3=A9tique?= Message-ID: <15a55fba-0602-21da-bbc5-190ad0b6c0c8@gmail.com> Bonjour, Une question dont la réponse n'est pas forcément du Perl: j'ai des noms, généralement français, dans une DB Postgres. je voudrais les sortir en ordre alphabétique "traditionel". Bon déjà la définition de "traditionel" pose problème: l'AFNOR NF Z 44-001 ne me plait pas trop, classer "du Château" avec les "D", "de Mi" avec les "M" et "de la Tour" avec les "L", ça semble bizarre. (et oui, j'ai des noms à particule dans la base). Mais bref, si je comprends bien Postgres ne peut pas grand chose pour moi, il n'a pas de collation compliquées, donc je dois générer une clef de tri moi même. Dites moi si je me trompe (ce qui m'arrangerait bieng!). Et si je ne me trompes pas, est-ce qu'il existe un module, ou du code quelque part, qui pourrait me créer ma clef sans que j'ai à le faire moi-même? merci. -- mirod From laurent.rosenfeld at googlemail.com Tue Mar 21 20:40:41 2017 From: laurent.rosenfeld at googlemail.com (Laurent Rosenfeld) Date: Tue, 21 Mar 2017 20:40:41 +0100 Subject: [Perl] perl6 2017-03 ne compile pas chez moi In-Reply-To: References: Message-ID: Bonjour, il existe un module, Inline::Perl5, permettant d'utiliser du code ou des modules Perl 5 en Perl 6. Voir par exemple: https://github.com/niner/Inline-Perl5. Mais je ne sais pas si ça fonctionne avec quelque chose relativement complexe et et aussi particulier que POE. Laurent. Le 21 mars 2017 à 09:37, Dominique a écrit : > Apres qq galère avec rakudobrew j'ai pus m'en sortir avec > rakudobrew nuke moar > rakudobrew build moar > > et là c'est reparti. Sinon je plantait sur une erreur > de 3rdparty/libtommath > voila, si ca peux aider qq, ou si il y a des explication de votre coté > pour cette galere car jusqu'à present les upgrade se faisait sans soucis, > merci de commenter. > > en revanche j'ai perdu tout les modules installés, donc je refait > l'inventaire des install. > a ce propos j'ai besoin de POE ça existe sous perl6 ? > > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl > > -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From asseline at telecom-paristech.fr Tue Mar 21 22:49:39 2017 From: asseline at telecom-paristech.fr (Dominique Asselineau) Date: Tue, 21 Mar 2017 22:49:39 +0100 Subject: [Perl] =?utf-8?q?Difficult=C3=A9_avec_la_m=C3=A9thode__findnodes_?= =?utf-8?q?de_XML=3A=3ALibXML=3A=3ANode?= Message-ID: <20170321214939.GA1380@telecom-paristech.fr> Bonjour, La méthode findnodes du module XML::LibXML::Node demande un chemin qui doit être préfixé par un NameSpace. Connaîtriez-vous le moyen de savoir les NameSpaces disponibles au moment d'exécuter cette méthode ? Je l'ai pourtant utilisée par ailleurs sans difficulté mais cette fois, je suis bloqué. Il s'agit du format TEI. Merci de votre éclairage. Cordialement. Dominique -- From minc.charles at wanadoo.fr Tue Mar 21 23:16:57 2017 From: minc.charles at wanadoo.fr (minc) Date: Tue, 21 Mar 2017 23:16:57 +0100 Subject: [Perl] =?utf-8?q?Difficult=C3=A9_avec_la_m=C3=A9thode_findnodes_d?= =?utf-8?q?e_XML=3A=3ALibXML=3A=3ANode?= In-Reply-To: <20170321214939.GA1380@telecom-paristech.fr> References: <20170321214939.GA1380@telecom-paristech.fr> Message-ID: <5f4db4c3-ac49-f434-dc14-c9da39134e57@wanadoo.fr> Bonsoir, TEI n'est pas un format. C'est une recommandation qui définit des balises XML orientées vers la linguistique. Par conséquent, dans le fichier on doit pouvoir retrouver le ou les liens vers les domaines de noms dans l'entête, sauf si les fichiers ne sont pas construits correctement... (cf le site TEI en complément). Cordialement. Le 21/03/2017 à 22:49, Dominique Asselineau a écrit : > Bonjour, > > La méthode findnodes du module XML::LibXML::Node demande un chemin qui > doit être préfixé par un NameSpace. Connaîtriez-vous le moyen de > savoir les NameSpaces disponibles au moment d'exécuter cette méthode ? > Je l'ai pourtant utilisée par ailleurs sans difficulté mais cette > fois, je suis bloqué. Il s'agit du format TEI. > > Merci de votre éclairage. > > Cordialement. > > Dominique > -------------- section suivante -------------- Une pièce jointe autre que texte a été nettoyée... Nom: minc_charles.vcf Type: text/x-vcard Taille: 238 octets Desc: non disponible URL: From olivier.mengue at gmail.com Tue Mar 21 23:20:30 2017 From: olivier.mengue at gmail.com (=?UTF-8?Q?Olivier_Mengu=C3=A9?=) Date: Tue, 21 Mar 2017 23:20:30 +0100 Subject: [Perl] =?utf-8?q?Trier_des_noms_par_ordre_alphab=C3=A9tique?= In-Reply-To: <15a55fba-0602-21da-bbc5-190ad0b6c0c8@gmail.com> References: <15a55fba-0602-21da-bbc5-190ad0b6c0c8@gmail.com> Message-ID: Dis donc, serais-tu en train de travailler sur des listes électorales ou des annuaires ? Tu ne nous as pas dit quel serait l'usage de cette liste triée. La réponse la plus apropriée peut par exemple différer selon si le rendu sera sur du papier ou s'il sera interactif (ou non) sur un écran. Je découvre cette norme NF Z 44-001 : https://fr.geneawiki.com/index.php/La_norme_AFNOR_NF_Z44-001 Pas facile à appliquer puisqu'il semble nécessaire de connaître la nationalité de la personne en plus de son nom. En plus elle ne semble pas correctement prendre en compte le cas "de la" : http://blog.pinsonnais.org/post/2009/09/02/Ce-que-je-pense-de-la-norme-AFNOR-NF-Z-44-2 Voici des conseils de tris de La Sorbonne : http://theleme.enc.sorbonne.fr/cours/edition_epoque_moderne/etablissement_des_index Mais ça semble plus adapté à un classement manuel pour l'édition qu'à un classement automatisé. Une solution flexible serait d'impliquer un humain dans le processs : 1. trier les noms en deux listes : - les noms simples sans espace ou apostrophes ou tiret => triés automatiquement avec une collation adapté (vérifier « oe » vs « ? ») - les autres à donner à un humain (en faisant éventuellement des suggestions basées sur NF 44-001 ou autre) qui doit donner la clé de tri 2. insérer la seconde liste dans la première en utilisant la clé de tri Idéalement il faut prévoir des renvois dans le rendu de la liste finale. Olivier. Le 21 mars 2017 à 16:10, mirod a écrit : > Bonjour, > > Une question dont la réponse n'est pas forcément du Perl: j'ai des noms, > généralement français, dans une DB Postgres. je voudrais les sortir en > ordre alphabétique "traditionel". > > Bon déjà la définition de "traditionel" pose problème: l'AFNOR NF Z 44-001 > ne me plait pas trop, classer "du Château" avec les "D", "de Mi" avec les > "M" et "de la Tour" avec les "L", ça semble bizarre. (et oui, j'ai des noms > à particule dans la base). > > Mais bref, si je comprends bien Postgres ne peut pas grand chose pour moi, > il n'a pas de collation compliquées, donc je dois générer une clef de tri > moi même. Dites moi si je me trompe (ce qui m'arrangerait bieng!). Et si je > ne me trompes pas, est-ce qu'il existe un module, ou du code quelque part, > qui pourrait me créer ma clef sans que j'ai à le faire moi-même? > > merci. > > -- > > mirod > > > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl > -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From sebastien at aperghis.net Wed Mar 22 01:26:54 2017 From: sebastien at aperghis.net (=?utf-8?Q?S=C3=A9bastien?= Aperghis-Tramoni) Date: Wed, 22 Mar 2017 01:26:54 +0100 (CET) Subject: [Perl] =?utf-8?q?Difficult=C3=A9_avec_la_m=C3=A9thode__findnodes_?= =?utf-8?q?de_XML=3A=3ALibXML=3A=3ANode?= In-Reply-To: <20170321214939.GA1380@telecom-paristech.fr> Message-ID: <1876817461.2392292.1490142414051.JavaMail.root@spooler3-g27.priv.proxad.net> Dominique Asselineau a écrit : > Bonjour, > > La méthode findnodes du module XML::LibXML::Node demande un chemin > qui doit être préfixé par un NameSpace. Connaîtriez-vous le moyen > de savoir les NameSpaces disponibles au moment d'exécuter cette > méthode ? Je l'ai pourtant utilisée par ailleurs sans difficulté > mais cette fois, je suis bloqué. Il s'agit du format TEI. Pas testée, mais une solution peut être de trouver tous les espaces de noms déclarés jusqu'au n?ud en question. Il ne semble pas y avoir de solution toute faite pour cela, et il faut visiblement remonter la hiérarchie en partant du n?ud à coup de ->parentNode(), et à chaque n?ud utiliser la méthode getNamespaces() qui renvoie la liste des espaces de nom déclarés à ce n?ud : for my $ns ($node->getNamespaces) { say "- ", $ns->declaredPrefix, ": ", $ns->declaredURI; } Tu accumules les NS dans un tableau ou un hash, en remontant jusqu'à la racine du document ($dom->documentElement), moment où tu as toutes les déclarations d'espaces de nom qui s'appliquent au n?ud de départ. -- Sébastien Aperghis-Tramoni Close the world, txEn eht nepO. From olivier.mengue at gmail.com Wed Mar 22 23:19:58 2017 From: olivier.mengue at gmail.com (=?UTF-8?Q?Olivier_Mengu=C3=A9?=) Date: Wed, 22 Mar 2017 23:19:58 +0100 Subject: [Perl] perl6 2017-03 ne compile pas chez moi In-Reply-To: References: Message-ID: Le 21 mars 2017 à 09:37, Dominique a écrit : > en revanche j'ai perdu tout les modules installés, donc je refait > l'inventaire des install. > a ce propos j'ai besoin de POE ça existe sous perl6 ? > Oublie POE. Même en Perl 5, c'est has-been (POE est lent et nécessite un formalisme très particulier, verbeux). Dans la box domotique d'IJENKO, on utilise AnyEvent avec grand succès. Perl 6 propose des vraies fonctionnalités de concurrence sans module externe : https://docs.perl6.org/language/concurrency Tu auras sûrement plus vite fait de réécrire ton code POE avec les primitives de concurrence de Perl 6 que de tenter de faire marcher POE et ton code Perl 5 dans Perl 6. Olivier. -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From d.minix at gmail.com Thu Mar 23 00:55:28 2017 From: d.minix at gmail.com (Dominix) Date: Wed, 22 Mar 2017 13:55:28 -1000 Subject: [Perl] perl6 2017-03 ne compile pas chez moi In-Reply-To: References: Message-ID: <3cd998ce-088f-a096-a852-07518f505e03@gmail.com> j'en prend bonne note, merci du tuyau. Le 22/03/2017 à 12:19, Olivier Mengué a écrit : > > > Le 21 mars 2017 à 09:37, Dominique > a écrit : > > en revanche j'ai perdu tout les modules installés, donc je refait > l'inventaire des install. > a ce propos j'ai besoin de POE ça existe sous perl6 ? > > > Oublie POE. Même en Perl 5, c'est has-been (POE est lent et nécessite > un formalisme très particulier, verbeux). Dans la box domotique > d'IJENKO, on utilise AnyEvent avec grand succès. > > Perl 6 propose des vraies fonctionnalités de concurrence sans module > externe : https://docs.perl6.org/language/concurrency > Tu auras sûrement plus vite fait de réécrire ton code POE avec les > primitives de concurrence de Perl 6 que de tenter de faire marcher POE > et ton code Perl 5 dans Perl 6. > > Olivier. > > > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From asseline at telecom-paristech.fr Thu Mar 23 12:04:37 2017 From: asseline at telecom-paristech.fr (Dominique Asselineau) Date: Thu, 23 Mar 2017 12:04:37 +0100 Subject: [Perl] =?utf-8?q?Difficult=C3=A9_avec_la_m=C3=A9thode_findnodes_d?= =?utf-8?q?e_XML=3A=3ALibXML=3A=3ANode?= In-Reply-To: <1876817461.2392292.1490142414051.JavaMail.root@spooler3-g27.priv.proxad.net> References: <20170321214939.GA1380@telecom-paristech.fr> <1876817461.2392292.1490142414051.JavaMail.root@spooler3-g27.priv.proxad.net> Message-ID: <20170323110437.GA24246@telecom-paristech.fr> Sébastien Aperghis-Tramoni wrote on Wed, Mar 22, 2017 at 01:26:54AM +0100 > Dominique Asselineau a écrit : > > > Bonjour, > > > > La méthode findnodes du module XML::LibXML::Node demande un chemin > > qui doit être préfixé par un NameSpace. Connaîtriez-vous le moyen > > de savoir les NameSpaces disponibles au moment d'exécuter cette > > méthode ? Je l'ai pourtant utilisée par ailleurs sans difficulté > > mais cette fois, je suis bloqué. Il s'agit du format TEI. > > Pas testée, mais une solution peut être de trouver tous les espaces > de noms déclarés jusqu'au n?ud en question. Il ne semble pas y avoir > de solution toute faite pour cela, et il faut visiblement remonter > la hiérarchie en partant du n?ud à coup de ->parentNode(), et à chaque > n?ud utiliser la méthode getNamespaces() qui renvoie la liste des > espaces de nom déclarés à ce n?ud : > > for my $ns ($node->getNamespaces) { > say "- ", $ns->declaredPrefix, ": ", $ns->declaredURI; > } > > Tu accumules les NS dans un tableau ou un hash, en remontant jusqu'à > la racine du document ($dom->documentElement), moment où tu as toutes > les déclarations d'espaces de nom qui s'appliquent au n?ud de départ. Merci pour la solution qui donne un résultat mais pas celui attendu. Parmi ces résultats on a un espace de nom vide, c'est peut-être ça qui pose problème. Du coup je m'en suis remis à la doc de XML::LibXML::Node à propos de findnodes et j'ai exploité les notes afin de forcer un nom d'espace à l'aide du module XML::LibXML::XPathContext. C'est un peu lourd mais au moins ça marche. Dominique -- From eduval at ligfy.fr Sun Mar 26 22:15:44 2017 From: eduval at ligfy.fr (Eric DUVAL) Date: Sun, 26 Mar 2017 22:15:44 +0200 Subject: [Perl] =?utf-8?q?probl=C3=A8me_mise_au_point_regexp?= Message-ID: <6eb9e694-1d4a-27e5-37c0-852ba0ce8c64@ligfy.fr> Bonjour, Je dois anonymiser un fichier contenant des lignes de la forme: (STRING == je ne peux pas transmettre les vraies données) Aucune des lignes ne se ressemblent. Cette ligne est donnée à titre d'exemple. Le nombre de var=value peut varier de 0 à n. file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - [21/Mar/2017:19:19:57 +0100] "/uri?var1=value1&var2=value2&var3=value3" 200 0.037-0.033=0.004 POST 484 - "STRING4" "STRING5" "STRING6" Et ressortir avec des lignes de la forme: file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - [21/Mar/2017:19:19:57 +0100] "/uri?var1=xxx&var2=xxx&var3=xxx" 200 0.037-0.033=0.004 POST 484 - "STRING4" "STRING5" "STRING6" ou de la forme file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - [21/Mar/2017:19:19:57 +0100] "/uri" 200 0.037-0.033=0.004 POST 484 - "STRING4" "STRING5" "STRING6" Après de multiples tentatives, je n'arrive à mettre au point l'expression régulière qui va bien :-( Le code perl est de la forme: (J'ai séparé les expressions pour la clarté de l'exemple) [...] while( ) { s/(\?.*)=.*([&\"])/${1}=xxx${2}/; s/(&.*)=.*([&\"])/${1}=xxx${2}/; } [...] J'ai essayé des expressions plus ou moins complexes mais sans résultats. Merci pour l'aide. Eric. From anaseto at bardinflor.perso.aquilenet.fr Sun Mar 26 22:39:15 2017 From: anaseto at bardinflor.perso.aquilenet.fr (Yon) Date: Sun, 26 Mar 2017 20:39:15 +0000 Subject: [Perl] =?utf-8?q?probl=C3=A8me_mise_au_point_regexp?= In-Reply-To: <6eb9e694-1d4a-27e5-37c0-852ba0ce8c64@ligfy.fr> References: <6eb9e694-1d4a-27e5-37c0-852ba0ce8c64@ligfy.fr> Message-ID: <20170326203915.GK84241@bardinflor.perso.aquilenet.fr> Bonjour, On Sun, Mar 26, 2017 at 10:15:44PM +0200, Eric DUVAL wrote: > Bonjour, > > Je dois anonymiser un fichier contenant des lignes de la forme: > (STRING == je ne peux pas transmettre les vraies données) > Aucune des lignes ne se ressemblent. Cette ligne est donnée à titre > d'exemple. > Le nombre de var=value peut varier de 0 à n. > > file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - [21/Mar/2017:19:19:57 > +0100] "/uri?var1=value1&var2=value2&var3=value3" 200 0.037-0.033=0.004 POST > 484 - "STRING4" "STRING5" "STRING6" > > Et ressortir avec des lignes de la forme: > > file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - [21/Mar/2017:19:19:57 > +0100] "/uri?var1=xxx&var2=xxx&var3=xxx" 200 0.037-0.033=0.004 POST 484 - > "STRING4" "STRING5" "STRING6" > > ou de la forme > > file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - [21/Mar/2017:19:19:57 > +0100] "/uri" 200 0.037-0.033=0.004 POST 484 - "STRING4" "STRING5" "STRING6" > > Après de multiples tentatives, je n'arrive à mettre au point l'expression > régulière qui va bien :-( > > Le code perl est de la forme: > (J'ai séparé les expressions pour la clarté de l'exemple) > > [...] > while( ) { > s/(\?.*)=.*([&\"])/${1}=xxx${2}/; > s/(&.*)=.*([&\"])/${1}=xxx${2}/; > } > [...] > > J'ai essayé des expressions plus ou moins complexes mais sans résultats. Un truc vite-fait, si j'ai bien compris: s{(?<=[?&]) ([^?&=]+) = ([^&"]+) (?=["&])}{$1=xxx}xg; Après, peut-être que ça vaut le coup d'extraire juste l'url, et d'utiliser par exemple le module URI avec un $uri->queryform, puis après reconstruire une nouvelle url. -- Yon From eduval at ligfy.fr Sun Mar 26 23:56:46 2017 From: eduval at ligfy.fr (Eric DUVAL) Date: Sun, 26 Mar 2017 23:56:46 +0200 Subject: [Perl] =?utf-8?q?probl=C3=A8me_mise_au_point_regexp?= In-Reply-To: <20170326203915.GK84241@bardinflor.perso.aquilenet.fr> References: <6eb9e694-1d4a-27e5-37c0-852ba0ce8c64@ligfy.fr> <20170326203915.GK84241@bardinflor.perso.aquilenet.fr> Message-ID: Bonjour Yon, ça à l'air de fonctionner, merci :-) Demain je testerai sur un plus grand jeu de données. C'est une règle que je vais injecter dans une conf de syslog-ng. Je ne peux pas utiliser de module perl, juste la regexp. Je reviendrai sur cette liste indiquer si tout est ok. Encore merci Eric. Le 26/03/2017 à 22:39, Yon a écrit : > Bonjour, > > On Sun, Mar 26, 2017 at 10:15:44PM +0200, Eric DUVAL wrote: >> Bonjour, >> >> Je dois anonymiser un fichier contenant des lignes de la forme: >> (STRING == je ne peux pas transmettre les vraies données) >> Aucune des lignes ne se ressemblent. Cette ligne est donnée à titre >> d'exemple. >> Le nombre de var=value peut varier de 0 à n. >> >> file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - [21/Mar/2017:19:19:57 >> +0100] "/uri?var1=value1&var2=value2&var3=value3" 200 0.037-0.033=0.004 POST >> 484 - "STRING4" "STRING5" "STRING6" >> >> Et ressortir avec des lignes de la forme: >> >> file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - [21/Mar/2017:19:19:57 >> +0100] "/uri?var1=xxx&var2=xxx&var3=xxx" 200 0.037-0.033=0.004 POST 484 - >> "STRING4" "STRING5" "STRING6" >> >> ou de la forme >> >> file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - [21/Mar/2017:19:19:57 >> +0100] "/uri" 200 0.037-0.033=0.004 POST 484 - "STRING4" "STRING5" "STRING6" >> >> Après de multiples tentatives, je n'arrive à mettre au point l'expression >> régulière qui va bien :-( >> >> Le code perl est de la forme: >> (J'ai séparé les expressions pour la clarté de l'exemple) >> >> [...] >> while( ) { >> s/(\?.*)=.*([&\"])/${1}=xxx${2}/; >> s/(&.*)=.*([&\"])/${1}=xxx${2}/; >> } >> [...] >> >> J'ai essayé des expressions plus ou moins complexes mais sans résultats. > Un truc vite-fait, si j'ai bien compris: > > s{(?<=[?&]) ([^?&=]+) = ([^&"]+) (?=["&])}{$1=xxx}xg; > > Après, peut-être que ça vaut le coup d'extraire juste l'url, et > d'utiliser par exemple le module URI avec un $uri->queryform, puis après > reconstruire une nouvelle url. > From eduval at ligfy.fr Mon Mar 27 19:39:32 2017 From: eduval at ligfy.fr (Eric DUVAL) Date: Mon, 27 Mar 2017 19:39:32 +0200 Subject: [Perl] =?utf-8?q?probl=C3=A8me_mise_au_point_regexp?= In-Reply-To: References: <6eb9e694-1d4a-27e5-37c0-852ba0ce8c64@ligfy.fr> <20170326203915.GK84241@bardinflor.perso.aquilenet.fr> Message-ID: <91db5388-9b2f-8b0c-d6d2-a19df10c0df4@ligfy.fr> Bonjour, Je sors un peu du contexte purement perl, j'en suis désolé, perl est mon ami pour la mise au point de cette regexp par contre le moteur pcre de syslog-ng ne l'a pas été! ;-) Le moteur PCRE dans syslog-ng ne réagit de la même façon que PERL. Du coup impossible de mettre au point correctement la règle. Je l'ai transformé, pour le moteur pcre du syslog-ng en: "(\] \")*?[\?][^\"]*\" " Je reconnais le début et la fin de l?occurrence formant les paramètres GET ...bla bla] "/uri" blabla.. ...bla bla] "/uri?var=val" blabla.. ...bla bla] "/uri?var=val&var1=val1" blabla.. Et ressort en anonymisation: ...bla bla] "/uri" blabla.. ...bla bla] "/uri" blabla.. ...bla bla] "/uri" blabla.. Ce qui me permet de supprimer la totalité des paramètres de l'URI en utilisant la fonction subst() utilisable dans des rewrite( ) syslog-ng. Je n'ai pas dit mon dernier mot, prochaine étape obtenir le résultat qui fonctionne avec la regexp (perl) proposée par Yon. I will come back :-) Encore merci pour l'aide. Eric Le 26/03/2017 à 23:56, Eric DUVAL a écrit : > Bonjour Yon, > > ça à l'air de fonctionner, merci :-) > Demain je testerai sur un plus grand jeu de données. > C'est une règle que je vais injecter dans une conf de syslog-ng. > Je ne peux pas utiliser de module perl, juste la regexp. > Je reviendrai sur cette liste indiquer si tout est ok. > > Encore merci > > Eric. > > Le 26/03/2017 à 22:39, Yon a écrit : >> Bonjour, >> >> On Sun, Mar 26, 2017 at 10:15:44PM +0200, Eric DUVAL wrote: >>> Bonjour, >>> >>> Je dois anonymiser un fichier contenant des lignes de la forme: >>> (STRING == je ne peux pas transmettre les vraies données) >>> Aucune des lignes ne se ressemblent. Cette ligne est donnée à titre >>> d'exemple. >>> Le nombre de var=value peut varier de 0 à n. >>> >>> file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - >>> [21/Mar/2017:19:19:57 >>> +0100] "/uri?var1=value1&var2=value2&var3=value3" 200 >>> 0.037-0.033=0.004 POST >>> 484 - "STRING4" "STRING5" "STRING6" >>> >>> Et ressortir avec des lignes de la forme: >>> >>> file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - >>> [21/Mar/2017:19:19:57 >>> +0100] "/uri?var1=xxx&var2=xxx&var3=xxx" 200 0.037-0.033=0.004 POST >>> 484 - >>> "STRING4" "STRING5" "STRING6" >>> >>> ou de la forme >>> >>> file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - - >>> [21/Mar/2017:19:19:57 >>> +0100] "/uri" 200 0.037-0.033=0.004 POST 484 - "STRING4" "STRING5" >>> "STRING6" >>> >>> Après de multiples tentatives, je n'arrive à mettre au point >>> l'expression >>> régulière qui va bien :-( >>> >>> Le code perl est de la forme: >>> (J'ai séparé les expressions pour la clarté de l'exemple) >>> >>> [...] >>> while( ) { >>> s/(\?.*)=.*([&\"])/${1}=xxx${2}/; >>> s/(&.*)=.*([&\"])/${1}=xxx${2}/; >>> } >>> [...] >>> >>> J'ai essayé des expressions plus ou moins complexes mais sans résultats. >> Un truc vite-fait, si j'ai bien compris: >> >> s{(?<=[?&]) ([^?&=]+) = ([^&"]+) (?=["&])}{$1=xxx}xg; >> >> Après, peut-être que ça vaut le coup d'extraire juste l'url, et >> d'utiliser par exemple le module URI avec un $uri->queryform, puis après >> reconstruire une nouvelle url. >> > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl From anaseto at bardinflor.perso.aquilenet.fr Mon Mar 27 19:56:49 2017 From: anaseto at bardinflor.perso.aquilenet.fr (Yon) Date: Mon, 27 Mar 2017 17:56:49 +0000 Subject: [Perl] =?utf-8?q?probl=C3=A8me_mise_au_point_regexp?= In-Reply-To: <91db5388-9b2f-8b0c-d6d2-a19df10c0df4@ligfy.fr> References: <6eb9e694-1d4a-27e5-37c0-852ba0ce8c64@ligfy.fr> <20170326203915.GK84241@bardinflor.perso.aquilenet.fr> <91db5388-9b2f-8b0c-d6d2-a19df10c0df4@ligfy.fr> Message-ID: <20170327175649.GL82038@bardinflor.perso.aquilenet.fr> On Mon, Mar 27, 2017 at 07:39:32PM +0200, Eric DUVAL wrote: > Bonjour, > > Je sors un peu du contexte purement perl, j'en suis désolé, perl est mon ami > pour la mise au point de cette regexp par contre le moteur pcre de syslog-ng > ne l'a pas été! ;-) > > Le moteur PCRE dans syslog-ng ne réagit de la même façon que PERL. > Du coup impossible de mettre au point correctement la règle. Ah, peut-être que les regexps syslog-ng ne connaissent pas les assertions "look-around". Peut-être que ceci (à adaptations près, je sais pas comment sont les regexp syslog-ng) marcherait : s{([?&]) ([^?&=]+) = ([^&"]+)}{$1$2=xxx}xg l'inconvénient c'est que j'ai peur qu'il y ait plus de chances que ça modifie potentielement des trucs en trop. Peut-être qu'il vaut mieux quelques précautions de plus dans les classes de charactères en interdisant les espaces : s{([?&]) ([^?&=\s]+) = ([^&"\s]+)}{$1$2=xxx}xg -- Yon From eduval at ligfy.fr Mon Mar 27 20:17:23 2017 From: eduval at ligfy.fr (Eric DUVAL) Date: Mon, 27 Mar 2017 20:17:23 +0200 Subject: [Perl] =?utf-8?q?probl=C3=A8me_mise_au_point_regexp?= In-Reply-To: <20170327175649.GL82038@bardinflor.perso.aquilenet.fr> References: <6eb9e694-1d4a-27e5-37c0-852ba0ce8c64@ligfy.fr> <20170326203915.GK84241@bardinflor.perso.aquilenet.fr> <91db5388-9b2f-8b0c-d6d2-a19df10c0df4@ligfy.fr> <20170327175649.GL82038@bardinflor.perso.aquilenet.fr> Message-ID: Merci Yon, je teste ça demain. Le 27/03/2017 à 19:56, Yon a écrit : > On Mon, Mar 27, 2017 at 07:39:32PM +0200, Eric DUVAL wrote: >> Bonjour, >> >> Je sors un peu du contexte purement perl, j'en suis désolé, perl est mon ami >> pour la mise au point de cette regexp par contre le moteur pcre de syslog-ng >> ne l'a pas été! ;-) >> >> Le moteur PCRE dans syslog-ng ne réagit de la même façon que PERL. >> Du coup impossible de mettre au point correctement la règle. > Ah, peut-être que les regexps syslog-ng ne connaissent pas les > assertions "look-around". Peut-être que ceci (à adaptations près, je > sais pas comment sont les regexp syslog-ng) marcherait : > > s{([?&]) ([^?&=]+) = ([^&"]+)}{$1$2=xxx}xg > > l'inconvénient c'est que j'ai peur qu'il y ait plus de chances que ça > modifie potentielement des trucs en trop. Peut-être qu'il vaut mieux > quelques précautions de plus dans les classes de charactères en > interdisant les espaces : > > s{([?&]) ([^?&=\s]+) = ([^&"\s]+)}{$1$2=xxx}xg >