L'expression focntionne, je vais mainteneant tester sur mes fichier de taille importante et espère avoir des performances convenables.
Pierre. ----- échangez opinions et commentaires dans les forums de discussion. http://www.usenetgratuit.com/
Jul
Pierre Génieys a formulé ce samedi :
Rue des Prairies wrote:
$c++ while($l =~ s/^s*>//);
Merci pour cette réponse rapide.
Je n'ai pas pensé à l'opérateur s///;
L'expression focntionne, je vais mainteneant tester sur mes fichier de taille importante et espère avoir des performances convenables.
Bonjour,
Si ce n'est que pour compter le nombre d'occurence, l'application de cette expression régulière n'est pas la plus rapide :o) (elle transforme la ligne, ce qui n'est pas nécessaire). Il est normalement plus intéressant ici d'utiliser un marqueur de position comme nous le permet nos chère expressions :o)
my @c; open(FILE, "<file.ext"); while (my $l = <FILE>) do { my $c = 0; # on reinitialise le compteur de position à 0 (début de ligne) pos ($l) = 0; # ne pas oublier le marqueur /g # G est le marqueur de position de la rec précédente $c++ while ( $l =~ m/Gs*>/g ); push (@c, $c); };
Normalement (s'il n'y a pas d'erreur dans le code :D), ça te retourne le nombre de > (précédé ou non d'espaces) au début de chaque ligne du fichier. Tu peux récupérer le numéro de la ligne correspondante par les index du tableau ($c[0] -> première ligne, etc). Sinon, tu peux l'adapter pour une consomation de ressources moins excessive (suprrimer l'utilisation du tableau et travailler sur les résultats en live dans la première boucle while).
-- Jul... réapparru comme par enchantement
Pierre Génieys a formulé ce samedi :
Rue des Prairies wrote:
$c++ while($l =~ s/^s*>//);
Merci pour cette réponse rapide.
Je n'ai pas pensé à l'opérateur s///;
L'expression focntionne, je vais mainteneant
tester sur mes fichier de taille importante et espère avoir
des performances convenables.
Bonjour,
Si ce n'est que pour compter le nombre d'occurence, l'application de
cette expression régulière n'est pas la plus rapide :o) (elle
transforme la ligne, ce qui n'est pas nécessaire).
Il est normalement plus intéressant ici d'utiliser un marqueur de
position comme nous le permet nos chère expressions :o)
my @c;
open(FILE, "<file.ext");
while (my $l = <FILE>) do {
my $c = 0;
# on reinitialise le compteur de position à 0 (début de ligne)
pos ($l) = 0;
# ne pas oublier le marqueur /g
# G est le marqueur de position de la rec précédente
$c++ while ( $l =~ m/Gs*>/g );
push (@c, $c);
};
Normalement (s'il n'y a pas d'erreur dans le code :D), ça te retourne
le nombre de > (précédé ou non d'espaces) au début de chaque ligne du
fichier. Tu peux récupérer le numéro de la ligne correspondante par les
index du tableau ($c[0] -> première ligne, etc). Sinon, tu peux
l'adapter pour une consomation de ressources moins excessive (suprrimer
l'utilisation du tableau et travailler sur les résultats en live dans
la première boucle while).
L'expression focntionne, je vais mainteneant tester sur mes fichier de taille importante et espère avoir des performances convenables.
Bonjour,
Si ce n'est que pour compter le nombre d'occurence, l'application de cette expression régulière n'est pas la plus rapide :o) (elle transforme la ligne, ce qui n'est pas nécessaire). Il est normalement plus intéressant ici d'utiliser un marqueur de position comme nous le permet nos chère expressions :o)
my @c; open(FILE, "<file.ext"); while (my $l = <FILE>) do { my $c = 0; # on reinitialise le compteur de position à 0 (début de ligne) pos ($l) = 0; # ne pas oublier le marqueur /g # G est le marqueur de position de la rec précédente $c++ while ( $l =~ m/Gs*>/g ); push (@c, $c); };
Normalement (s'il n'y a pas d'erreur dans le code :D), ça te retourne le nombre de > (précédé ou non d'espaces) au début de chaque ligne du fichier. Tu peux récupérer le numéro de la ligne correspondante par les index du tableau ($c[0] -> première ligne, etc). Sinon, tu peux l'adapter pour une consomation de ressources moins excessive (suprrimer l'utilisation du tableau et travailler sur les résultats en live dans la première boucle while).
-- Jul... réapparru comme par enchantement
Jul
oups, j'ai oublié de fermé le FILEHANDLE à la fin :o)
-- Jul... réapparru comme par enchantement
oups, j'ai oublié de fermé le FILEHANDLE à la fin :o)
Je suis plutôt pour votre 2ème solution bien que je ne suis pas fort dans les expressions régulières avec les smiley ?:
Je pense (mais peux me tromper) que l'utilisation de la variable $&, $MATCH est déconseillée
extrait de la doc de perl .. The use of this variable anywhere in a program imposes a considerable performance penalty on all regular expression matches. See "BUGS". ..
Merci à tous de vos réponses.
Pierre.
----- échangez opinions et commentaires dans les forums de discussion. http://www.usenetgratuit.com/
Jérémy JUST wrote:
my $l = ' > >> comment vas-tu ? > je vais > bien...';
Je suis plutôt pour votre 2ème solution bien que je ne suis
pas fort dans les expressions régulières avec les smiley ?:
Je pense (mais peux me tromper) que l'utilisation de la variable $&,
$MATCH est déconseillée
extrait de la doc de perl
..
The use of this variable anywhere in a program imposes a considerable
performance penalty on all regular expression matches. See "BUGS".
..
Merci à tous de vos réponses.
Pierre.
-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/
Je suis plutôt pour votre 2ème solution bien que je ne suis pas fort dans les expressions régulières avec les smiley ?:
Je pense (mais peux me tromper) que l'utilisation de la variable $&, $MATCH est déconseillée
extrait de la doc de perl .. The use of this variable anywhere in a program imposes a considerable performance penalty on all regular expression matches. See "BUGS". ..
Merci à tous de vos réponses.
Pierre.
----- échangez opinions et commentaires dans les forums de discussion. http://www.usenetgratuit.com/
Jérémy JUST
On 26 Mar 2005 16:43:58 GMT (Pierre Génieys) wrote:
Je suis plutôt pour votre 2ème solution bien que je ne suis pas fort dans les expressions régulières avec les smiley ?:
Ce « smiley » fait juste que les parenthèses ne mémorisent pas dans $2 (pour gagner un peu de temps).
Je pense (mais peux me tromper) que l'utilisation de la variable $&, $MATCH est déconseillée
.. The use of this variable anywhere in a program imposes a considerable performance penalty on all regular expression matches. See "BUGS". ..
Oui. Si ton programme utilise comme seule regexp celle que l'on discute ici, l'utilisation de $& ne devrait pas dégrader les performances. Si tu as plus de regexps, à partir du moment où tu auras utilisé *une fois* $&, pour *chacune* des regexps, Perl renseignera les trois variables $&, $' et $`; si tu ne t'en sers pas, c'est une perte de temps.
En gros, ces trois variables ne sont à utiliser que si on en a l'utilité à plusieurs reprises.
-- Jérémy JUST
On 26 Mar 2005 16:43:58 GMT
p_geni...@yahoo.fr (Pierre Génieys) wrote:
Je suis plutôt pour votre 2ème solution bien que je ne suis
pas fort dans les expressions régulières avec les smiley ?:
Ce « smiley » fait juste que les parenthèses ne mémorisent pas dans $2
(pour gagner un peu de temps).
Je pense (mais peux me tromper) que l'utilisation de la variable $&,
$MATCH est déconseillée
..
The use of this variable anywhere in a program imposes a considerable
performance penalty on all regular expression matches. See "BUGS".
..
Oui.
Si ton programme utilise comme seule regexp celle que l'on
discute ici, l'utilisation de $& ne devrait pas dégrader les
performances.
Si tu as plus de regexps, à partir du moment où tu auras utilisé
*une fois* $&, pour *chacune* des regexps, Perl renseignera les trois
variables $&, $' et $`; si tu ne t'en sers pas, c'est une perte de
temps.
En gros, ces trois variables ne sont à utiliser que si on en a
l'utilité à plusieurs reprises.
On 26 Mar 2005 16:43:58 GMT (Pierre Génieys) wrote:
Je suis plutôt pour votre 2ème solution bien que je ne suis pas fort dans les expressions régulières avec les smiley ?:
Ce « smiley » fait juste que les parenthèses ne mémorisent pas dans $2 (pour gagner un peu de temps).
Je pense (mais peux me tromper) que l'utilisation de la variable $&, $MATCH est déconseillée
.. The use of this variable anywhere in a program imposes a considerable performance penalty on all regular expression matches. See "BUGS". ..
Oui. Si ton programme utilise comme seule regexp celle que l'on discute ici, l'utilisation de $& ne devrait pas dégrader les performances. Si tu as plus de regexps, à partir du moment où tu auras utilisé *une fois* $&, pour *chacune* des regexps, Perl renseignera les trois variables $&, $' et $`; si tu ne t'en sers pas, c'est une perte de temps.
En gros, ces trois variables ne sont à utiliser que si on en a l'utilité à plusieurs reprises.