OVH Cloud OVH Cloud

les essais du samedi.

17 réponses
Avatar
kurtz le pirate
bonjour,

j'ai besoin d'aide. vraiment débutant, j'ai décider le construire une
petit projet perl mais je bute déja sur un truc.

voila le code :

----
#!/usr/local/bin/perl -w

$eps_file="forme.eps";
open(EPSFILE,"<$eps_file") || die("Impossible d'ouvrir le fichier\n");
foreach $line (<EPSFILE>) {
print "->$line";
}
close(EPSFILE);
----

le problème c'est que je n'ai qu'une seule ligne ! lorsque j'ouvre mon
fichier "forme.eps" dans un éditeur de texte j'en ai 1433.

je m'y prends sûrement mal. le but définitif c'est de ne garder que
certaines lignes de ce fichier... mais comme je suis déja bloqué !!!

vous pouvez m'aider ?
merci.

7 réponses

1 2
Avatar
Denis -esp2008-
Bonsoir,

ca donne : 0 forme.eps ... mais j'ai trouvé !!! perl n'étant pas
"portable" et comme je suis ou osX, c'est la galère des <fin de ligne>.


Je trouve quand même bizarre que wc et perl soient mal configurés
par défaut sous osx, je me demande s'il n'y a pas un problème
d'installation quelque part...

Pour positionner la valeur du saut de ligne par défaut, on peut utiliser
la variable $/ au début du programme avec la valeur souhaitée.

- j'ai convertis ce fichier au format unix avec la ligne suivante :
perl -p -e 's/r/n/g' <forme.eps > formeU.eps


La commande tr (en ligne de commande) ou l'opérateur tr de perl ferait
cela plus efficacement.


Bonne chance pour la suite,

--
Denis

Avatar
kurtz le pirate
In article ,
Jean-Pierre Vidal wrote:

Le Sat, 05 Mar 2005 18:09:17 +0100, kurtz le pirate a écrit :
[...]
merci pour vos aides. j'aurais surement d'autres questions
klp


Je suis frustré : ton message est arrivé au moment ou je soupçonnais
les plate-forme dos/unix/mac.

pour me venger, médite les résultats des programmes suivant :

$ perl -e '$a="01"; $b="1"; print $a == $b ? "egal" : "different"'
$ perl -e '$a="01"; $b="1"; print $a eq $b ? "egal" : "different"'

Attention au contexte
Jean-Pierre



oui... euh la t'es pas sympa, juste je débute moi !
je dirais que dans le premier cas, $a et $b sont évaluer et donc
01 -> 1 qui est égal à 1. dans le second cas, pas d'évaluation
et bien sur, 01 est différent de 1.

tu veux donc dire que je devrais écrire :
if(($save == 0) && ($line eq "nn")) {
et
if(($save >= 1) && ($line =~ /^d/) && ($line =~ /[m|L|C]Z/)) {

j'ai bon ?
;-))



Avatar
Eric Jacoboni
Denis -esp2008- writes:

Je trouve quand même bizarre que wc et perl soient mal configurés
par défaut sous osx


Non, ils le sont bien. Mais, en plus, je pense que sous OS X, les
sauts de lignes sont ceux d'Unix. Il n'y a plus rien de spécifique au
Mac.

--
Éric Jacoboni, né il y a 1413490184 secondes

Avatar
tanuki.2005
bonjour,

j'ai besoin d'aide. vraiment débutant, j'ai décider le construire une
petit projet perl mais je bute déja sur un truc.

voila le code :

----
#!/usr/local/bin/perl -w

$eps_file="forme.eps";
open(EPSFILE,"<$eps_file") || die("Impossible d'ouvrir le fichiern");
foreach $line (<EPSFILE>) {
print "->$line";
}
close(EPSFILE);
----

le problème c'est que je n'ai qu'une seule ligne ! lorsque j'ouvre mon
fichier "forme.eps" dans un éditeur de texte j'en ai 1433.

je m'y prends sûrement mal. le but définitif c'est de ne garder que
certaines lignes de ce fichier... mais comme je suis déja bloqué !!!

vous pouvez m'aider ?
merci.


Le format eps (postscript encapsule) etant assez courant sous MacIntosh
: il est possible que les caracteres qui signalent la fin de ligne
soient differents.
Si le programme marche avec un texte fait avec notepad cela provient
bien du fichier.

La solution pour cela est de definir autrement le caractere de fin de
ligne ( c'est une simple affectation en perl) mais j'ai eu ce probleme
en 98 et depuis je ne fais plus de perl...

J'esperes avoir quand meme aide ...

Philippe

Avatar
Jean-Pierre Vidal
Le Sat, 05 Mar 2005 19:59:04 +0100, kurtz le pirate a écrit :


$ perl -e '$a="01"; $b="1"; print $a == $b ? "egal" : "different"'
$ perl -e '$a="01"; $b="1"; print $a eq $b ? "egal" : "different"'

Attention au contexte
Jean-Pierre



oui... euh la t'es pas sympa, juste je débute moi !


Tout le monde a débuté un jour... et par certains côtés je suis moi
aussi un débutant.

je dirais que dans le premier cas, $a et $b sont évaluer et donc
01 -> 1 qui est égal à 1. dans le second cas, pas d'évaluation
et bien sur, 01 est différent de 1.


oui et non, pas exactement (il y a toujours évaluation, dans le premier
cas dans un "contexte numérique", dans le deuxième dans un "contexte
de chaîne alphanumérique").

tu veux donc dire que je devrais écrire :
if(($save == 0) && ($line eq "nn")) {
et
if(($save >= 1) && ($line =~ /^d/) && ($line =~ /[m|L|C]Z/)) {

j'ai bon ?
;-))


oui :-) eq, ne, gt, etc. évaluent et comparent des chaînes, et ==, !=, >
évaluent et comparent des valeurs numériques, ce qui conduit à des
résultats différents en partant des mêmes variables.

Je ne sais plus où ça se trouve dans la doc (perlop ? quelqu'un le
dira...), en gros, les premiers opérateurs (eq, ne, gt, etc.) comparent
les chaînes '01' et '1' alphabétiquement (la première '01' est "avant"
(donc différent de) '1' car '0' est "avant" '1'), les second (==, !=, >,
etc.) comparent des valeurs numériques, et dans ce cas 01 et 1 sont
égaux.

Ma remarque n'était en aucun cas antipathique, elle se voulait juste
didactique (attention au contexte = attention aux différences entre le
contexte 'chaîne de caractère' et le contexte 'nombre'). Ces "contexte"
font partie du "contexte scalaire", mais il y en a d'autres, les
contextes "liste" et "hash"...

A plus,
Jean-Pierre

Je viens de voir la réponse de tanuki.2005 "definir autrement le
caractere de fin de ligne"
perldoc perlvar :
$/ The input record separator, newline by default.
autrement dit, sur mac, tu devrais t'en sortir avec $/ = 0x0d (sans
garantie)

Bonne continuation
Jean-Pierre



Avatar
Paul Gaborit
À (at) Sat, 05 Mar 2005 19:51:14 +0100,
Denis -esp2008- écrivait (wrote):
Bonsoir,

ca donne : 0 forme.eps ... mais j'ai trouvé !!! perl n'étant pas
"portable" et comme je suis ou osX, c'est la galère des <fin de ligne>.


Je trouve quand même bizarre que wc et perl soient mal configurés
par défaut sous osx, je me demande s'il n'y a pas un problème
d'installation quelque part...


Ils sont bien configurés... pour Unix (fin de ligne = LF). Mais le monde Mac
n'était pas Unix avant MacOS X. La plupart des éditeurs de textes ou autres
logiciels produisent encore des fichiers au format texte MacOS < X (fin de
ligne = CR). C'est un problème de transition...

Un peu comme les problèmes que rencontre la plupart des Unix pour passer de
ASCII (ISO-xxx, ...) vers UTF-8.

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


Avatar
kurtz le pirate
In article ,
Jean-Pierre Vidal wrote:

Je viens de voir la réponse de tanuki.2005 "definir autrement le
caractere de fin de ligne"
perldoc perlvar :
$/ The input record separator, newline by default.
autrement dit, sur mac, tu devrais t'en sortir avec $/ = 0x0d (sans
garantie)



oui, c'est la bonne piste. j'ai ajouté ça dans mon script et ça
marche bien :
if($^O eq "darwin") { $/="r"; }


merci encore


1 2