OVH Cloud OVH Cloud

index ou m// ?

6 réponses
Avatar
p_geni...
Bonjour,

je dois lire plusieurs fichiers ligne par ligne
pour chercher les lignes contenant une chaine
(tjrs en majuscules) STR.

Je me pose une question sur le moyen le plus rapide de
le faire. est-ce

$line =~ /STR/ ou index($line,'STR') != -1

quelqu'un a-t-il été confronté à ce problème ?

Pierre.
-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/

6 réponses

Avatar
Jacques Caron
Salut,

On 17 Sep 2005 16:16:54 GMT, Pierre Génieys wrote:

Je me pose une question sur le moyen le plus rapide de
le faire. est-ce

$line =~ /STR/ ou index($line,'STR') != -1


Ben suffit d'essayer :-)

Jacques.

Avatar
Paul Gaborit
À (at) 17 Sep 2005 16:16:54 GMT,
(Pierre Génieys) écrivait (wrote):
je dois lire plusieurs fichiers ligne par ligne
pour chercher les lignes contenant une chaine
(tjrs en majuscules) STR.

Je me pose une question sur le moyen le plus rapide de
le faire. est-ce

$line =~ /STR/ ou index($line,'STR') != -1


Si STR est une chaîne standard (ce n'est pas une expression dite
rationnelle ou régulière), il vaut mieux utiliser 'index'.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
p_geni...
Paul Gaborit wrote:

Si STR est une chaîne standard (ce n'est pas une expression dite
rationnelle ou régulière), il vaut mieux utiliser 'index'.




Il s'agit bien d'une chaîne standart une adresse IP du genre '127.0.0.1'
je vais ajouter quelques lignes de code afin de comparer les performances
(temps, ressources utilisées, etc...)


merci,

Pierre.

-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/

Avatar
Paul Gaborit
À (at) 19 Sep 2005 12:38:24 GMT,
(Pierre Génieys) écrivait (wrote):
Il s'agit bien d'une chaîne standart une adresse IP du genre '127.0.0.1'
je vais ajouter quelques lignes de code afin de comparer les performances
(temps, ressources utilisées, etc...)


Raisons de plus pour utiliser 'index'. Le '.' (dans le numéro IP) est
considéré comme un caractère spécial dans les regexp (il remplace
n'importe quel caractère). Pour éviter cela, il faut utiliser Q.

Donc :

$str = "127.0.0.1";
...
if ($chaine =~ m/Q$strE/) {
...
}

ou (plus simple) :

$str = "127.0.0.1";
...
if (index($chaine, $str) != -1) {
...
}

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Nicolas George
Paul Gaborit wrote in message :
Raisons de plus pour utiliser 'index'. Le '.' (dans le numéro IP) est
considéré comme un caractère spécial dans les regexp (il remplace
n'importe quel caractère). Pour éviter cela, il faut utiliser Q.


D'un autre côté, on a probablement intérêt, dans l'exemple donné, à chercher
b127.0.0.0b, ce qu'index n'est pas capable de faire.

Avatar
Paul Gaborit
À (at) Mon, 19 Sep 2005 14:26:02 +0000 (UTC),
Nicolas George <nicolas$ écrivait (wrote):
Paul Gaborit wrote in message :
Raisons de plus pour utiliser 'index'. Le '.' (dans le numéro IP) est
considéré comme un caractère spécial dans les regexp (il remplace
n'importe quel caractère). Pour éviter cela, il faut utiliser Q.


D'un autre côté, on a probablement intérêt, dans l'exemple donné, à chercher
b127.0.0.0b, ce qu'index n'est pas capable de faire.


Certes... mais en poussant un peu plus loin, vu que c'est un fichier
de log, on doit connaître de manière certaine la nature du b (espace,
tabulation...) et dans ce cas 'index' redevient plus intéressant ;-)

En poussant encore plus loin, peut-être que l'adresse IP est toujours
en début de ligne (ou à une position fixe) et dans ce cas... je vous
trouver les solutions ;-)

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>