![]() |
| fonction parse-replace | |
| dionysos | 23-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 | |
| Laurent | 23-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. | |
| Laurent | 23-Jun-2011/23:39:22+2:00 |
| un peu* déroutante | |
| guest2 | 26-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. | |