OVH Cloud OVH Cloud

expression reguliere

7 réponses
Avatar
osiris
Bonjour =E0 tous,

voici mon probleme, j'ai un fichier nomme partie.txt, =E0 l'interieur de
ce fichier une partie d'echec de la forme suivante :

1=2E e4 e5 2. Nf3 d6 3. Bc4 Nc6 4. Nc3 a6 5. O-O Nf6 6. d3 Be7 7. Bg5 Nd7
8=2E Be3
O-O 9. a4 Nb6 10. Bd5 Nxd5 11. exd5 Nb4 12. d4 c5 13. dxc6 exd4 14.
Nxd4 Nxc6

Je voudrais remplacer dans ce fichier les N par des C, les B par des F
et donc enregistrer les modifications dans le meme fichier

comment puis-je faire ceci ?

merci de vos reponses

7 réponses

Avatar
Klaus Eichner
"osiris" wrote in message
news:

Bonjour à tous,

voici mon probleme, j'ai un fichier nomme partie.txt, à l'interieur de
ce fichier une partie d'echec de la forme suivante :

1. e4 e5 2. Nf3 d6 3. Bc4 Nc6 4. Nc3 a6 5. O-O Nf6 6. d3 Be7 7. Bg5 Nd7
8. Be3
O-O 9. a4 Nb6 10. Bd5 Nxd5 11. exd5 Nb4 12. d4 c5 13. dxc6 exd4 14.
Nxd4 Nxc6

Je voudrais remplacer dans ce fichier les N par des C, les B par des F
et donc enregistrer les modifications dans le meme fichier

comment puis-je faire ceci ?

merci de vos reponses


perl -pi -e 'tr/NB/CF/'

voir aussi http://perl.enstimac.fr/DocFr/perlrun.html , paragraphe option
'-i'
et http://perl.enstimac.fr/DocFr/perlop.html#item_tr/

--
Klaus

Avatar
Klaus Eichner
"Klaus Eichner" wrote in message
news:42d95c02$0$23541$
"osiris" wrote in message
news:

Bonjour à tous,

voici mon probleme, j'ai un fichier nomme partie.txt, à l'interieur de
ce fichier une partie d'echec de la forme suivante :

1. e4 e5 2. Nf3 d6 3. Bc4 Nc6 4. Nc3 a6 5. O-O Nf6 6. d3 Be7 7. Bg5 Nd7
8. Be3
O-O 9. a4 Nb6 10. Bd5 Nxd5 11. exd5 Nb4 12. d4 c5 13. dxc6 exd4 14.
Nxd4 Nxc6

Je voudrais remplacer dans ce fichier les N par des C, les B par des F
et donc enregistrer les modifications dans le meme fichier

comment puis-je faire ceci ?

merci de vos reponses


perl -pi -e 'tr/NB/CF/'
^^^^^^^^^^^^^^^^^^

cela ne marche pas.
Il faut toujours tester!

J'ai oublié de coller un '.bak' à la fin de -pi et surtout, il faut mettre
le nom du fichier à la fin, je m'excuse!
(testé sous Windows Me et ActiveState perl v5.8.6)

C:>perl -pi'.bak' -e "tr/NB/CF/" partie.txt

C:>type partie.txt
1. e4 e5 2. Cf3 d6 3. Fc4 Cc6 4. Cc3 a6 5. O-O Cf6 6. d3 Fe7 7. Fg5 Cd7
8. Fe3
O-O 9. a4 Cb6 10. Fd5 Cxd5 11. exd5 Cb4 12. d4 c5 13. dxc6 exd4 14.
Cxd4 Cxc6


voir aussi http://perl.enstimac.fr/DocFr/perlrun.html , paragraphe option
'-i'
et http://perl.enstimac.fr/DocFr/perlop.html#item_tr/

--
Klaus



--
Klaus


Avatar
osiris
merci Klaus, super

par contre 2 points:

je dois le lancer 2 fois en ligne de commande pour qu'il fasse les
manips

puis-je faire un script et non le lancer en ligne de commande ?

merci bcp
Avatar
Klaus Eichner
"osiris" wrote in message
news:
merci Klaus, super

par contre 2 points:

je dois le lancer 2 fois en ligne de commande pour qu'il fasse les
manips


Chez moi, ça marche tout de suite avec le premier lancement:

avant:
=== fichier 'partie.txt': "...Nf3...Bc4..."
fichier 'partie.txt.bak': --- n'existe pas ! ---

lancer la commande pour la 1ère fois:
======================== C:>perl -pi.bak -e "tr/NB/CF/" partie.txt

après:
=== fichier 'partie.txt': "...Cf3...Fc4..."
fichier 'partie.txt.bak': "...Nf3...Bc4..."

Il faut consulter le fichier 'partie.txt' pour voir le résultat, la commande
a effectué les manipulations (remplacer les N par des C et les B par des F)
dès le premier lancement.

Par contre, si tu consultes le fichier 'partie.txt.bak', tu ne vois pas le
résultat (mais c'est normale, car le fichier 'partie.txt.bak' est une
sauvegarde du fichier originale). En plus, si tu lances la commande une
deuxième fois, les manipulations seront visible même dans le fichier
'partie.txt.bak'.

Mais il ne faut lancer la commande qu'une seule fois et ensuite, il faut
consulter le résultat dans 'partie.txt' (...et non pas dans
'partie.txt.bak').

Merci d'indiquer le système d'exploitation (Linux, Windows XP, Windows 2000,
Windows 95, etc...) et la version de perl (commande "perl -v") si tu as
toujours des problèmes.


puis-je faire un script et non le lancer en ligne de commande ?


Bien sur, il y a plus d'une façon de procéder

(en anglais: "There's More Than One Way To Do It" -> TMTOWTDI,
voir
http://perl.enstimac.fr/DocFr/perlfaq1.html#estil%20difficile%20d'apprendre%20perl)


voici ma version script:
======================================= use strict;
use warnings;

my $fichier = 'partie.txt';
my $ext = '.bak';

rename($fichier, $fichier.$ext)
or die "Echec renommer '$fichier' '$fichier$ext', Raison: $!";

open(ENTREE, "<$fichier$ext")
or die "Echec lecture fichier '$fichier$ext', Raison: $!";
open(SORTIE, ">$fichier")
or die "Echec ecriture fichier '$fichier', Raison: $!";

while (<ENTREE>) {
tr/NB/CF/;
print SORTIE;
}

close SORTIE;
close ENTREE;
=======================================

merci bcp



--
Klaus

Avatar
Klaus Eichner
"osiris" wrote in message
news:
merci Klaus, super

par contre 2 points:

je dois le lancer 2 fois en ligne de commande pour qu'il fasse les
manips

puis-je faire un script et non le lancer en ligne de commande ?

merci bcp


J'ai vu que la réponse a été faite par googlegroups, et je pensait que
l'astuce suivante serait très intéressante:

Il y a deux méthodes pour répondre avec googlegroups:

=========================== Méthode 1 - répondre sans contexte:
=========================== Cliquer sur le lien >>reply<< en bas du message, une fenêtre vide apparaît
et on peut saisir une réponse. Le problème avec cette méthode est qu'aucun
contexte du message original n'est fourni.

=========================== Méthode 2 - répondre avec contexte (c'est ma méthode préférée):
=========================== Cliquer sur le lien >>show options<< en haut du message, une nouvelle boîte
grise s'ouvre automatiquement, ensuite il faut cliquer sur le lien >>reply<<
dans la boîte grise. Avec cette méthode, le contexte du message original est
automatiquement fourni.

--
Klaus

Avatar
osiris
Et bien merci pour tout Klaus,

tes explications et ton script marche à la merveille

@+

Osiris73

"osiris" wrote in message
news:
merci Klaus, super

par contre 2 points:

je dois le lancer 2 fois en ligne de commande pour qu'il fasse les
manips

puis-je faire un script et non le lancer en ligne de commande ?

merci bcp


J'ai vu que la réponse a été faite par googlegroups, et je pensait que
l'astuce suivante serait très intéressante:

Il y a deux méthodes pour répondre avec googlegroups:

======================== ====
Méthode 1 - répondre sans contexte:
======================== ====
Cliquer sur le lien >>reply<< en bas du message, une fenêtre vide appar aît
et on peut saisir une réponse. Le problème avec cette méthode est q u'aucun
contexte du message original n'est fourni.

======================== ====
Méthode 2 - répondre avec contexte (c'est ma méthode préférée ):
======================== ====
Cliquer sur le lien >>show options<< en haut du message, une nouvelle bo îte
grise s'ouvre automatiquement, ensuite il faut cliquer sur le lien >>repl y<<
dans la boîte grise. Avec cette méthode, le contexte du message origi nal est
automatiquement fourni.

--
Klaus



Avatar
DoMinix

"osiris" wrote in message
news:

merci Klaus, super

Il y a deux méthodes pour répondre avec googlegroups:


Méthode 1 - répondre sans contexte:
Méthode 2 - répondre avec contexte (c'est ma méthode préférée):




Et bien merci pour tout Klaus,

tes explications et ton script marche à la merveille

@+

Osiris73



et tant qu'on y est, un rappel des bon usages:

1/ Merci de poster *a l'endroi* sur USENET,
http://www.giromini.org/usenet-fr/repondre.html

joyeuses perlerie.

--
dominix