bug parse?
dionysos14-May-2013/20:24:27+2:00
Mon objectif est de matcher un nombre dans une serie.

Exemple:
text: "  123 4567 00 1 367"
digit: charset "0123456789"
digits: [some digit]
parse text [copy val digits (print mold val) some digits]
  123 4567 00 1 367
== false


Le résultat obtenu n'est pas celui escompté! Je m'attendais à récupérer seulement le premier nombre "123" (en plus des autres nombres copiés dans val, val contient également les 1er espaces).

J'ai l'impression qu'il faut passer par un parse/all car sinon la variable text semble être strippé avant son traitement.

Comment faire pour récupérer simplement "123".

Clair qu'il faut une doc plus complète sur parse. Bien vu shadwolf avec ton défis
J'ai bien trouvé une solution (sans parse/all car pas souhaitable) mais j'aimerais savoir s'il n'y a pas mieux qu'un palliatif.
coccinelle15-May-2013/10:02:20+2:00
Pourquoi penses-tu que parse/all n'est pas souhaitable ?
shadwolf15-May-2013/20:11:23+2:00
merci en esperant qu´ on trouvera une solucion a ton probleme.

Ce que naivement je me dit que tu devrai commence par some digits le copier dans val jusqu a ce que tu rencontre un " " puis que tu imprimes val.

etc...
space: " "
parse/all text [some digits copy val to space (print mold val)]


Ou quelque chose d approchant... je pense que la bonne demarche qunad on fait des regles en parce c´est toujours de ce dire "qu est ce que je cherche a identifier et jusqu´ ou je veux aller?". L un des problemes de parse c est de ne pas etre sequenciel comme le sont les expression regulieres.
coccinelle16-May-2013/10:22:21+2:00
Pour obtenir la première série de chiffre, c'est quand même pas compliqué avec parse all.
text: "  123 4567 00 1 367"
not-digit: complement digit: charset "0123456789"
parse/all text [any not-digit copy val some digit (print mold val) to end]
dionysos16-May-2013/23:31:29+2:00
@coccinelle: En faisant un parse/all, il faut prendre en compte tous les espaces et ça alourdit les règles de façon importante parfois. Mais tout compte fait, c'est la solution la plus propre.


@shadwolf: Que veux tu dire par : " L un des problemes de parse c est de ne pas etre sequenciel comme le sont les expression regulieres." ?
J'utilise aussi beaucoup python et ses expressions régulières. Je dois dire que je préfère largement rebol pour parser du texte. Je trouve ça plus lisible, plus rapide à mettre en place. Je rencontre souvent moins de problème de mise au point en rebol.


Merci à tous les 2.
En tout cas, j'ai vraiment été surpris quand j'ai vu le comportement obtenu avec mon exemple plus haut.
dionysos16-May-2013/23:54:11+2:00
@shadwolf: J'ai voulu voir ce qui c'était échangé sur ton post concernant le défis. J'ai vu que tu avais référencé mon sujet. Je n'avais pas fait gaffe que tu ouvrais la porte aux questions.
yos17-May-2013/10:16:03+2:00
Salut,

Il ne faut pas oublier que parse peut simplement découper
des chaines si on lui dit qu'il n'y a pas de règles :


>> parse "  123 4567 00 1 367" none
== ["123" "4567" "00" "1" "367"]



yos

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2