OVH Cloud OVH Cloud

regex et espace

13 réponses
Avatar
Bibi69
Bonjour,
j'ai un texte dans lequel j'ai des "- "que je veux isoler.
Mais je n'arrive pas à faire reconnaitre l'espace :
/-/ marche mais me renvoie des choses en trop
/- / et /-\s/ ne renvoient rien
Une idée ?

10 réponses

1 2
Avatar
Paul Gaborit
À (at) Sun, 03 Dec 2006 23:22:40 +0100,
Bibi69 écrivait (wrote):
j'ai un texte dans lequel j'ai des "- "que je veux isoler.
Mais je n'arrive pas à faire reconnaitre l'espace :
/-/ marche mais me renvoie des choses en trop
/- / et /-s/ ne renvoient rien
Une idée ?


L'espace n'est peut-être pas vraiment un espace ?
L'erreur est peut-être ailleurs ?
...

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

Avatar
Bibi69
À (at) Sun, 03 Dec 2006 23:22:40 +0100,
Bibi69 écrivait (wrote):
j'ai un texte dans lequel j'ai des "- "que je veux isoler.
Mais je n'arrive pas à faire reconnaitre l'espace :
/-/ marche mais me renvoie des choses en trop
/- / et /-s/ ne renvoient rien
Une idée ?


L'espace n'est peut-être pas vraiment un espace ?
L'erreur est peut-être ailleurs ?
...

D'apres des tests que je viens de faire, il y aurait un pb d'encodage

des caracteres. Mon texte est en latin1, perl ne le reconnait pas ?
Comment je peux convertir à un autre encodage sans perdre les accents ?


Avatar
Nicolas George
Bibi69 wrote in message <4573eb1a$0$21933$:
D'apres des tests que je viens de faire, il y aurait un pb d'encodage
des caracteres. Mon texte est en latin1, perl ne le reconnait pas ?
Comment je peux convertir à un autre encodage sans perdre les accents ?


Si tu lis depuis un fichier, « binmode $fh, ":encoding(iso-8859-1)" », si tu
as déjà la chaîne par un autre moyen, Encode::decode.

Avatar
Paul Gaborit
À (at) Mon, 04 Dec 2006 10:32:10 +0100,
Bibi69 écrivait (wrote):
D'apres des tests que je viens de faire, il y aurait un pb d'encodage
des caracteres.


Il n'y a *jamais* de pb d'encodage des caractères. Dans un ordinateur,
tous les textes sont encodés d'une manière ou d'une autre. S'il y a
problème, c'est parce qu'on n'utilise pas le bon encodage ou parce
qu'une conversion entre deux encodages différents échoue.

Mon texte est en latin1, perl ne le reconnait pas ?


Si. Il suffit de lui demander correctement.

Comment je peux convertir à un autre encodage sans perdre les accents ?


En utilisant les modules d'encodage : Encode.

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

Avatar
Bibi69
À (at) Mon, 04 Dec 2006 10:32:10 +0100,
Bibi69 écrivait (wrote):
D'apres des tests que je viens de faire, il y aurait un pb d'encodage
des caracteres.


Il n'y a *jamais* de pb d'encodage des caractères. Dans un ordinateur,
tous les textes sont encodés d'une manière ou d'une autre. S'il y a
problème, c'est parce qu'on n'utilise pas le bon encodage ou parce
qu'une conversion entre deux encodages différents échoue.

Mon texte est en latin1, perl ne le reconnait pas ?


Si. Il suffit de lui demander correctement.

C'est à dire ?



Avatar
Paul Gaborit
À (at) Mon, 04 Dec 2006 15:59:32 +0100,
Bibi69 écrivait (wrote):
À (at) Mon, 04 Dec 2006 10:32:10 +0100,
Bibi69 écrivait (wrote):
[...]


Mon texte est en latin1, perl ne le reconnait pas ?
Si. Il suffit de lui demander correctement.


C'est à dire ?



Dites-nous comment vous faites pour lui demander et nous pourrons vous
dire si vous lui demandez correctement.

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



Avatar
Bibi69
À (at) Mon, 04 Dec 2006 15:59:32 +0100,
Bibi69 écrivait (wrote):
À (at) Mon, 04 Dec 2006 10:32:10 +0100,
Bibi69 écrivait (wrote):
[...]


Mon texte est en latin1, perl ne le reconnait pas ?
Si. Il suffit de lui demander correctement.


C'est à dire ?



Dites-nous comment vous faites pour lui demander et nous pourrons vous
dire si vous lui demandez correctement.

Voila ce que j'écris :


open in, "< $ARGV[0]" or die;
my $l0 = <in>;
while ($l0)
{
if ($l0 =~ /-s/){
print $l0;
}
else{
}
$l0=<in>;
}
close in;

Si je fais /-/ j'obtiens plein de trucs. Par contre /- /, /-s/ /-./ ne
me donnent rien. Quoi que je mette derrière -, ça ne donne rien. Est-ce
que - ne serait pas un opérateur ?




Avatar
Paul Gaborit
À (at) Mon, 04 Dec 2006 16:16:52 +0100,
Bibi69 écrivait (wrote):
Voila ce que j'écris :

open in, "< $ARGV[0]" or die;


Pour dire à Perl que le filehandle 'in' doit décoder de l'iso8859-1,
vous devez passer per un appel à 'binmode' :

binmode(in, ":encoding(iso-8859-1)");

Remarque : par convention les noms des filehandles devraient être en
majuscules. Ici 'IN' (comme STDOUT, STDIN, STDERR...). Ou alors,
utilisez un scalaire :

open my $in, "<", $ARGV[0]"
or die "Can't read '$ARGV[0]': $!n;
binmode($in, ":encoding(iso-8859-1)");
my $l0 = <$in>;
...

my $l0 = <in>;
while ($l0)
{
if ($l0 =~ /-s/){
print $l0;
}
else{
}
$l0=<in>;
}
close in;

Si je fais /-/ j'obtiens plein de trucs. Par contre /- /, /-s/ /-./
ne me donnent rien. Quoi que je mette derrière -, ça ne donne
rien. Est-ce que - ne serait pas un opérateur ?


Le caractère '-' n'a rien de spécial dans une expression rationnelle
sauf dans une classe de caractères ([...]) mais ce n'est pas le cas
ici.

Pour l'espace et/ou le s, l'encodage et le contenu du fichier peuvent
jouer. Mais dans le cas de m/-./, cela devrait reconnaître tous les
textes contenant un '-' suivi d'un autre caractère. Et là, je vois mal
l'encodage poser problème systématiquement...

Utilisez-vous 'use strict;' et 'use warnings;' ?

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

Avatar
Bibi69
Utilisez-vous 'use strict;' et 'use warnings;' ?

Non


Apparement, le probleme est que mon texte d'entrée est un fichier
binaire et qu'il faut sans doute que je le convertisse en ascii mais je
ne trouve pas comment je dois faire...

Avatar
espie
In article ,
Paul Gaborit <Paul.Gaborit+ wrote:
Pour dire à Perl que le filehandle 'in' doit décoder de l'iso8859-1,
vous devez passer per un appel à 'binmode' :

binmode(in, ":encoding(iso-8859-1)");


Tiens, question bete, entre toi et Nicolas, ca fait deux appels a binmode
que je vois passer.

Y a-t-il une difference entre
open(my $f, '<:encoding(iso-8859-1)', 'filename');

et
open(my $f, '<', 'filename');
binmode($f, ':encoding(iso-8859-1)');
?

1 2