Remplacement de chaines de caractères dans un (ou des) fichier(s).
24 réponses
Séverin TERRIER
Bonjour à tou(te)s,
J'aurais besoin d'effectuer des remplacements de chaines de caractères dans
un (ou des) fichier(s).
Le remplacement devra se faire pour remplacer des pseudo-balises par des
balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>, pour
définir les différentes chaines à remplacer, dans le(s) fichier(s). Enfin,
c'est comme ça que je vois les choses...
Précision d'échelle :
- le nombre de paires sera assez limité (<10)
- la taille des fichiers est faible (<10 Ko)
- le nombre de fichiers est faible (<100).
Les fichiers dans lesquels le remplacement devra avoir lieu seront répartis
dans plusieurs répertoires, a raison d'un seul fichier .ext a remplacer
dans chaque répertoire (le répertoire contenant d'autres fichiers à
ignorer).
Le passage de commande précisera l'opération (codage/décodage), ainsi que
le ou les fichiers à traiter.
Je ne sais pas si je peux faire ça le plus simplement/efficacement
directement en shell unix (+ awk, sed...), ou en utilisant perl (par
exemple)...
Donc si vous avez des idées, exemples, script déjà établis, je suis
preneur, sachant que je suis débutant en script et perl...
Merci d'avance pour votre aide.
--
http://severinterrier.free.fr/Boot/ Tout est gratuit et en français.
CD de dépannage basé sur XP (ou 2003) avec interface graphique,
multitâche, support NTFS (lecture/écriture), réseau, gravure...
CD ou DVD Ultime, permettant d'installer plusieurs versions de
Windows, d'avoir des outils de dépannage, et beaucoup plus...
Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Le remplacement devra se faire pour remplacer des pseudo-balises par des balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>, pour définir les différentes chaines à remplacer, dans le(s) fichier(s). Enfin, c'est comme ça que je vois les choses...
le fichier source est du XML ? alors utilisez un parser XML avec XSLT
(et du coup, allez voir chez fr.comp.text.xml, mais après vous être documenté...)
bon courage
-- jpc http://www.enstimac.fr/~caruana/
Le remplacement devra se faire pour remplacer des pseudo-balises par des
balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>, pour
définir les différentes chaines à remplacer, dans le(s) fichier(s). Enfin,
c'est comme ça que je vois les choses...
le fichier source est du XML ?
alors utilisez un parser XML avec XSLT
(et du coup, allez voir chez fr.comp.text.xml, mais après vous être
documenté...)
Le remplacement devra se faire pour remplacer des pseudo-balises par des balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>, pour définir les différentes chaines à remplacer, dans le(s) fichier(s). Enfin, c'est comme ça que je vois les choses...
le fichier source est du XML ? alors utilisez un parser XML avec XSLT
(et du coup, allez voir chez fr.comp.text.xml, mais après vous être documenté...)
bon courage
-- jpc http://www.enstimac.fr/~caruana/
Stephane Chazelas
2004-09-15, 13:42(+00), Séverin TERRIER:
J'aurais besoin d'effectuer des remplacements de chaines de caractères dans un (ou des) fichier(s).
Le remplacement devra se faire pour remplacer des pseudo-balises par des balises HTML, ou l'inverse. [...]
Mais cette commande remplace 1 chaine par une autre, et pas DES chaines, par d'autres, ou je me trompe...
(en supposant que le shell est zsh).
-- http://severinterrier.free.fr/Boot/ Tout est gratuit et en français. CD de dépannage basé sur XP (ou 2003) avec interface graphique, multitâche, support NTFS (lecture/écriture), réseau, gravure... CD ou DVD Ultime, permettant d'installer plusieurs versions de Windows, d'avoir des outils de dépannage, et beaucoup plus... Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Re-bonjour,
et merci de cette réponse rapide.
Stephane Chazelas <cette.adresse@est.invalid> écrivait dans
news:slrnckgi41.260.stephane.chazelas@spam.is.invalid :
2004-09-15, 13:42(+00), Séverin TERRIER:
J'aurais besoin d'effectuer des remplacements de chaines de
caractères dans un (ou des) fichier(s).
Le remplacement devra se faire pour remplacer des pseudo-balises par
des balises HTML, ou l'inverse.
[...]
Mais cette commande remplace 1 chaine par une autre, et pas DES chaines,
par d'autres, ou je me trompe...
(en supposant que le shell est zsh).
--
http://severinterrier.free.fr/Boot/ Tout est gratuit et en français.
CD de dépannage basé sur XP (ou 2003) avec interface graphique,
multitâche, support NTFS (lecture/écriture), réseau, gravure...
CD ou DVD Ultime, permettant d'installer plusieurs versions de
Windows, d'avoir des outils de dépannage, et beaucoup plus...
Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Mais cette commande remplace 1 chaine par une autre, et pas DES chaines, par d'autres, ou je me trompe...
(en supposant que le shell est zsh).
-- http://severinterrier.free.fr/Boot/ Tout est gratuit et en français. CD de dépannage basé sur XP (ou 2003) avec interface graphique, multitâche, support NTFS (lecture/écriture), réseau, gravure... CD ou DVD Ultime, permettant d'installer plusieurs versions de Windows, d'avoir des outils de dépannage, et beaucoup plus... Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Séverin TERRIER
Bonjour,
Jean-Philippe Caruana écrivait dans news:ci9h7g$ :
Le remplacement devra se faire pour remplacer des pseudo-balises par des balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>, pour définir les différentes chaines à remplacer, dans le(s) fichier(s). Enfin, c'est comme ça que je vois les choses...
le fichier source est du XML ?
Heu, non, pas vraiment...
Merci quand même... -- http://severinterrier.free.fr/Boot/ Tout est gratuit et en français. CD de dépannage basé sur XP (ou 2003) avec interface graphique, multitâche, support NTFS (lecture/écriture), réseau, gravure... CD ou DVD Ultime, permettant d'installer plusieurs versions de Windows, d'avoir des outils de dépannage, et beaucoup plus... Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Bonjour,
Jean-Philippe Caruana <cf.site.web@pour.envoi> écrivait dans
news:ci9h7g$j4j2@news.rd.francetelecom.fr :
Le remplacement devra se faire pour remplacer des pseudo-balises par
des balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>,
pour définir les différentes chaines à remplacer, dans le(s)
fichier(s). Enfin, c'est comme ça que je vois les choses...
le fichier source est du XML ?
Heu, non, pas vraiment...
Merci quand même...
--
http://severinterrier.free.fr/Boot/ Tout est gratuit et en français.
CD de dépannage basé sur XP (ou 2003) avec interface graphique,
multitâche, support NTFS (lecture/écriture), réseau, gravure...
CD ou DVD Ultime, permettant d'installer plusieurs versions de
Windows, d'avoir des outils de dépannage, et beaucoup plus...
Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Jean-Philippe Caruana écrivait dans news:ci9h7g$ :
Le remplacement devra se faire pour remplacer des pseudo-balises par des balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>, pour définir les différentes chaines à remplacer, dans le(s) fichier(s). Enfin, c'est comme ça que je vois les choses...
le fichier source est du XML ?
Heu, non, pas vraiment...
Merci quand même... -- http://severinterrier.free.fr/Boot/ Tout est gratuit et en français. CD de dépannage basé sur XP (ou 2003) avec interface graphique, multitâche, support NTFS (lecture/écriture), réseau, gravure... CD ou DVD Ultime, permettant d'installer plusieurs versions de Windows, d'avoir des outils de dépannage, et beaucoup plus... Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Mais cette commande remplace 1 chaine par une autre, et pas DES chaines, par d'autres, ou je me trompe... [...]
"quelquechose" est une expression rationnelle (regular expression en Anglais). Voir perldoc perlre
Heu, oui, mais l'aide est *vraiment* très longue, et j'ai du mal à voir comment faire ce que je souhaiterais...
Comment spécifier la chaine de remplacement en fonction de la chaine cherchée ?
Sachant que l'opération doit pouvoir être réversible...
Un exemple peut-être ? -- http://severinterrier.free.fr/Boot/ Tout est gratuit et en français. CD de dépannage basé sur XP (ou 2003) avec interface graphique, multitâche, support NTFS (lecture/écriture), réseau, gravure... CD ou DVD Ultime, permettant d'installer plusieurs versions de Windows, d'avoir des outils de dépannage, et beaucoup plus... Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Re-bonjour,
Stephane Chazelas <cette.adresse@est.invalid> écrivait dans
news:slrnckgipu.260.stephane.chazelas@spam.is.invalid :
Mais cette commande remplace 1 chaine par une autre, et pas DES
chaines, par d'autres, ou je me trompe...
[...]
"quelquechose" est une expression rationnelle (regular
expression en Anglais). Voir perldoc perlre
Heu, oui, mais l'aide est *vraiment* très longue, et j'ai du mal à voir
comment faire ce que je souhaiterais...
Comment spécifier la chaine de remplacement en fonction de la chaine
cherchée ?
Sachant que l'opération doit pouvoir être réversible...
Un exemple peut-être ?
--
http://severinterrier.free.fr/Boot/ Tout est gratuit et en français.
CD de dépannage basé sur XP (ou 2003) avec interface graphique,
multitâche, support NTFS (lecture/écriture), réseau, gravure...
CD ou DVD Ultime, permettant d'installer plusieurs versions de
Windows, d'avoir des outils de dépannage, et beaucoup plus...
Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Mais cette commande remplace 1 chaine par une autre, et pas DES chaines, par d'autres, ou je me trompe... [...]
"quelquechose" est une expression rationnelle (regular expression en Anglais). Voir perldoc perlre
Heu, oui, mais l'aide est *vraiment* très longue, et j'ai du mal à voir comment faire ce que je souhaiterais...
Comment spécifier la chaine de remplacement en fonction de la chaine cherchée ?
Sachant que l'opération doit pouvoir être réversible...
Un exemple peut-être ? -- http://severinterrier.free.fr/Boot/ Tout est gratuit et en français. CD de dépannage basé sur XP (ou 2003) avec interface graphique, multitâche, support NTFS (lecture/écriture), réseau, gravure... CD ou DVD Ultime, permettant d'installer plusieurs versions de Windows, d'avoir des outils de dépannage, et beaucoup plus... Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Stephane Chazelas
2004-09-15, 14:10(+00), Séverin TERRIER: [...]
Comment spécifier la chaine de remplacement en fonction de la chaine cherchée ?
Sachant que l'opération doit pouvoir être réversible...
Un exemple peut-être ? [...]
s/<(.*?)>/[$1]/g
remplace les <toto> par [toto].
As-tu un exemple concret de ce que tu veux obtenir ?
-- Stephane
2004-09-15, 14:10(+00), Séverin TERRIER:
[...]
Comment spécifier la chaine de remplacement en fonction de la chaine
cherchée ?
Sachant que l'opération doit pouvoir être réversible...
Un exemple peut-être ?
[...]
s/<(.*?)>/[$1]/g
remplace les <toto> par [toto].
As-tu un exemple concret de ce que tu veux obtenir ?
Comment spécifier la chaine de remplacement en fonction de la chaine cherchée ?
Sachant que l'opération doit pouvoir être réversible...
Un exemple peut-être ? [...]
s/<(.*?)>/[$1]/g
remplace les <toto> par [toto].
As-tu un exemple concret de ce que tu veux obtenir ?
-- Stephane
Séverin TERRIER
Comment spécifier la chaine de remplacement en fonction de la chaine cherchée ?
Sachant que l'opération doit pouvoir être réversible...
Un exemple peut-être ?
s/<(.*?)>/[$1]/g
remplace les <toto> par [toto].
Oui, ça, je comprends bien.
Mais ayant plusieurs chaines à remplacer, je mets plusieurs occurences de la commande de remplacement s ?
Et le fichier sera parcouru une, ou plusieurs fois ? Remarque, vu l'échelle, c'est peut-être pas grave...
As-tu un exemple concret de ce que tu veux obtenir ?
Heu, pas sous la main...
-- http://severinterrier.free.fr/Boot/ Tout est gratuit et en français. CD de dépannage basé sur XP (ou 2003) avec interface graphique, multitâche, support NTFS (lecture/écriture), réseau, gravure... CD ou DVD Ultime, permettant d'installer plusieurs versions de Windows, d'avoir des outils de dépannage, et beaucoup plus... Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Comment spécifier la chaine de remplacement en fonction de la chaine
cherchée ?
Sachant que l'opération doit pouvoir être réversible...
Un exemple peut-être ?
s/<(.*?)>/[$1]/g
remplace les <toto> par [toto].
Oui, ça, je comprends bien.
Mais ayant plusieurs chaines à remplacer, je mets plusieurs occurences de
la commande de remplacement s ?
Et le fichier sera parcouru une, ou plusieurs fois ?
Remarque, vu l'échelle, c'est peut-être pas grave...
As-tu un exemple concret de ce que tu veux obtenir ?
Heu, pas sous la main...
--
http://severinterrier.free.fr/Boot/ Tout est gratuit et en français.
CD de dépannage basé sur XP (ou 2003) avec interface graphique,
multitâche, support NTFS (lecture/écriture), réseau, gravure...
CD ou DVD Ultime, permettant d'installer plusieurs versions de
Windows, d'avoir des outils de dépannage, et beaucoup plus...
Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Comment spécifier la chaine de remplacement en fonction de la chaine cherchée ?
Sachant que l'opération doit pouvoir être réversible...
Un exemple peut-être ?
s/<(.*?)>/[$1]/g
remplace les <toto> par [toto].
Oui, ça, je comprends bien.
Mais ayant plusieurs chaines à remplacer, je mets plusieurs occurences de la commande de remplacement s ?
Et le fichier sera parcouru une, ou plusieurs fois ? Remarque, vu l'échelle, c'est peut-être pas grave...
As-tu un exemple concret de ce que tu veux obtenir ?
Heu, pas sous la main...
-- http://severinterrier.free.fr/Boot/ Tout est gratuit et en français. CD de dépannage basé sur XP (ou 2003) avec interface graphique, multitâche, support NTFS (lecture/écriture), réseau, gravure... CD ou DVD Ultime, permettant d'installer plusieurs versions de Windows, d'avoir des outils de dépannage, et beaucoup plus... Disquettes de boot modulaires (support CD-Rom, réseau, NTFS, noms longs)
Pascal Bourguignon
"Séverin TERRIER" writes:
Bonjour à tou(te)s,
J'aurais besoin d'effectuer des remplacements de chaines de caractères dans un (ou des) fichier(s).
Le remplacement devra se faire pour remplacer des pseudo-balises par des balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>, pour définir les différentes chaines à remplacer, dans le(s) fichier(s). Enfin, c'est comme ça que je vois les choses...
Précision d'échelle : - le nombre de paires sera assez limité (<10) - la taille des fichiers est faible (<10 Ko) - le nombre de fichiers est faible (<100).
Les fichiers dans lesquels le remplacement devra avoir lieu seront répartis dans plusieurs répertoires, a raison d'un seul fichier .ext a remplacer dans chaque répertoire (le répertoire contenant d'autres fichiers à ignorer).
Le passage de commande précisera l'opération (codage/décodage), ainsi que le ou les fichiers à traiter.
Je ne sais pas si je peux faire ça le plus simplement/efficacement directement en shell unix (+ awk, sed...), ou en utilisant perl (par exemple)...
Donc si vous avez des idées, exemples, script déjà établis, je suis preneur, sachant que je suis débutant en script et perl...
Tu ferais mieux de débuter en common-lisp...
$ cat $(find test -type f) <b>trick<b>word<a>unit<a><c>text<c> <a>trick<b>word<b><a><c>wang<d> $ ./multi-replace.lisp --codage test Processing directory test Processing file /local/users/pascal/src/lisp/encours/test/toto/two.ext Processing file /local/users/pascal/src/lisp/encours/test/one.ext $ cat $(find test -type f) <bb>trick<bb>word<aa>unit<aa><cc>text<cc> <aa>trick<bb>word<bb><aa><cc>wang<dd> $ ./multi-replace.lisp --decodage test Processing directory test Processing file /local/users/pascal/src/lisp/encours/test/toto/two.ext Processing file /local/users/pascal/src/lisp/encours/test/one.ext $ cat $(find test -type f) <b>trick<b>word<a>unit<a><c>text<c> <a>trick<b>word<b><a><c>wang<d>
;; (The following four functions are extracted from a library.)
(defun displaced-vector (vector start &optional end) "Same as SUBSEQ but with a displaced array." (setf end (or end (length vector))) (assert (<= 0 start (length vector)) (start) "START should be an integer between 0 and ~D, not ~D" (length vector) start) (assert (<= start end (length vector)) (end) "END should be an integer between ~D and ~D, not ~D" start (length vector) end) (make-array (list (- end start)) :element-type (array-element-type vector) :displaced-to vector :displaced-index-offset start));;displaced-vector
Our enemies are innovative and resourceful, and so are we. They never stop thinking about new ways to harm our country and our people, and neither do we.
J'aurais besoin d'effectuer des remplacements de chaines de caractères dans
un (ou des) fichier(s).
Le remplacement devra se faire pour remplacer des pseudo-balises par des
balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>, pour
définir les différentes chaines à remplacer, dans le(s) fichier(s). Enfin,
c'est comme ça que je vois les choses...
Précision d'échelle :
- le nombre de paires sera assez limité (<10)
- la taille des fichiers est faible (<10 Ko)
- le nombre de fichiers est faible (<100).
Les fichiers dans lesquels le remplacement devra avoir lieu seront répartis
dans plusieurs répertoires, a raison d'un seul fichier .ext a remplacer
dans chaque répertoire (le répertoire contenant d'autres fichiers à
ignorer).
Le passage de commande précisera l'opération (codage/décodage), ainsi que
le ou les fichiers à traiter.
Je ne sais pas si je peux faire ça le plus simplement/efficacement
directement en shell unix (+ awk, sed...), ou en utilisant perl (par
exemple)...
Donc si vous avez des idées, exemples, script déjà établis, je suis
preneur, sachant que je suis débutant en script et perl...
Tu ferais mieux de débuter en common-lisp...
$ cat $(find test -type f)
<b>trick<b>word<a>unit<a><c>text<c>
<a>trick<b>word<b><a><c>wang<d>
$ ./multi-replace.lisp --codage test
Processing directory test
Processing file /local/users/pascal/src/lisp/encours/test/toto/two.ext
Processing file /local/users/pascal/src/lisp/encours/test/one.ext
$ cat $(find test -type f)
<bb>trick<bb>word<aa>unit<aa><cc>text<cc>
<aa>trick<bb>word<bb><aa><cc>wang<dd>
$ ./multi-replace.lisp --decodage test
Processing directory test
Processing file /local/users/pascal/src/lisp/encours/test/toto/two.ext
Processing file /local/users/pascal/src/lisp/encours/test/one.ext
$ cat $(find test -type f)
<b>trick<b>word<a>unit<a><c>text<c>
<a>trick<b>word<b><a><c>wang<d>
;; (The following four functions are extracted from a library.)
(defun displaced-vector (vector start &optional end)
"Same as SUBSEQ but with a displaced array."
(setf end (or end (length vector)))
(assert (<= 0 start (length vector)) (start)
"START should be an integer between 0 and ~D, not ~D"
(length vector) start)
(assert (<= start end (length vector)) (end)
"END should be an integer between ~D and ~D, not ~D"
start (length vector) end)
(make-array (list (- end start))
:element-type (array-element-type vector)
:displaced-to vector
:displaced-index-offset start));;displaced-vector
Our enemies are innovative and resourceful, and so are we. They never
stop thinking about new ways to harm our country and our people, and
neither do we.
J'aurais besoin d'effectuer des remplacements de chaines de caractères dans un (ou des) fichier(s).
Le remplacement devra se faire pour remplacer des pseudo-balises par des balises HTML, ou l'inverse.
On utilisera donc une liste de paire <element> <element_remplacant>, pour définir les différentes chaines à remplacer, dans le(s) fichier(s). Enfin, c'est comme ça que je vois les choses...
Précision d'échelle : - le nombre de paires sera assez limité (<10) - la taille des fichiers est faible (<10 Ko) - le nombre de fichiers est faible (<100).
Les fichiers dans lesquels le remplacement devra avoir lieu seront répartis dans plusieurs répertoires, a raison d'un seul fichier .ext a remplacer dans chaque répertoire (le répertoire contenant d'autres fichiers à ignorer).
Le passage de commande précisera l'opération (codage/décodage), ainsi que le ou les fichiers à traiter.
Je ne sais pas si je peux faire ça le plus simplement/efficacement directement en shell unix (+ awk, sed...), ou en utilisant perl (par exemple)...
Donc si vous avez des idées, exemples, script déjà établis, je suis preneur, sachant que je suis débutant en script et perl...
Tu ferais mieux de débuter en common-lisp...
$ cat $(find test -type f) <b>trick<b>word<a>unit<a><c>text<c> <a>trick<b>word<b><a><c>wang<d> $ ./multi-replace.lisp --codage test Processing directory test Processing file /local/users/pascal/src/lisp/encours/test/toto/two.ext Processing file /local/users/pascal/src/lisp/encours/test/one.ext $ cat $(find test -type f) <bb>trick<bb>word<aa>unit<aa><cc>text<cc> <aa>trick<bb>word<bb><aa><cc>wang<dd> $ ./multi-replace.lisp --decodage test Processing directory test Processing file /local/users/pascal/src/lisp/encours/test/toto/two.ext Processing file /local/users/pascal/src/lisp/encours/test/one.ext $ cat $(find test -type f) <b>trick<b>word<a>unit<a><c>text<c> <a>trick<b>word<b><a><c>wang<d>
;; (The following four functions are extracted from a library.)
(defun displaced-vector (vector start &optional end) "Same as SUBSEQ but with a displaced array." (setf end (or end (length vector))) (assert (<= 0 start (length vector)) (start) "START should be an integer between 0 and ~D, not ~D" (length vector) start) (assert (<= start end (length vector)) (end) "END should be an integer between ~D and ~D, not ~D" start (length vector) end) (make-array (list (- end start)) :element-type (array-element-type vector) :displaced-to vector :displaced-index-offset start));;displaced-vector
Our enemies are innovative and resourceful, and so are we. They never stop thinking about new ways to harm our country and our people, and neither do we.
Stephane Chazelas
2004-09-15, 14:24(+00), Séverin TERRIER: [...]
s/<(.*?)>/[$1]/g
remplace les <toto> par [toto].
Oui, ça, je comprends bien.
Mais ayant plusieurs chaines à remplacer, je mets plusieurs occurences de la commande de remplacement s ? [...]
Oui, separees par des ";".
s/a/b/g;s/foo/bar/g
-- Stephane
2004-09-15, 14:24(+00), Séverin TERRIER:
[...]
s/<(.*?)>/[$1]/g
remplace les <toto> par [toto].
Oui, ça, je comprends bien.
Mais ayant plusieurs chaines à remplacer, je mets plusieurs occurences de
la commande de remplacement s ?
[...]