fonction parse-replace
dionysos23-Jun-2011/22:14:29+2:00
Bonsoir,
je me demandais s'il était possible de créer une fonction replace plus puissante que celle embarquait dans rebol.

L'idée serait de fournir à cette fonction un bloc de règles parse, que parse utiliserait pour faire du remplacement.
string: "toto bla bla bla toto bla titi bla bla (bla bla bla) bla toto"
parse-replace string [ "toto" | "titi" | [ "(" skip to ")" ] | [ "[" skip to "]" ] ] ""
=>  "bla bla bla bla bla bla bla"


je voudrais éviter de mixer du replace/all avec du parse et avoir une solution avec 1 seul appel à parse.

Avez vous une idée de la règle parse à utiliser?
Merci
Laurent23-Jun-2011/23:38:21+2:00
Qu'on me corrige si je me trompe (avec parse on ne sait jamais) mais le problème c'est que tu passes en paramètres des trucs qui ne sont pas des règles proprement dites :(skip, to) et en plus tu passes des sous-règles ([...]) ce qui n'est pas géré par parse et en plus tu utilises des "ou" (|) ce qui ne marche qu'avec des éléments terminaux et encore en rebol 3 uniquement.
Donc il faudrait tout décomposer dans ta fonction.
Une fois qu'on a pris le coup parse n'est pas si compliqué, mais sa logique est un déroutante au début c'est vrai.
Laurent23-Jun-2011/23:39:22+2:00
un peu* déroutante
guest226-Jun-2011/11:16:50+2:00
La règle doit Ítre dépoussiérée mais le principe fonctionne.

r: [ "toto " | "titi " | "(" thru ") " | "[" thru "] " ]
w: ""

R3>>
parse/all s [return while[change r w | skip]]

R2>>
parse/all s [some[p: r e: (p: change/part p w e) :p | skip]]

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2