World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
Pekr 22-Jun-2005 [239] | but I like to use flat structure and foreach [real name of vars here], so I need consistent record length :-) |
Gabriele 22-Jun-2005 [240] | i do too usually, just suggesting an alternative :-) |
Pekr 22-Jun-2005 [241] | hmm, if (length? tmp) <> 7 [append tmp ""] will hopefully help :-) |
Allen 22-Jun-2005 [242] | Pekr for now, just add an extra "," as you parse each row. That will give you a consistent length with the current behaviour |
Pekr 22-Jun-2005 [243] | oh no, I am at the ends ... so bye bye beautifull oneliners ... I just found item which contains set of quotes :-) rebol will not translate that and my block is confused once again :-) |
Allen 22-Jun-2005 [244] | foreach line ln-tel-list [append result parse/all join line ";" ";"] |
Pekr 22-Jun-2005 [245x3] | damned, I will delete that contact and I will be done ;-) One contact from 3 000 does not count, even if that is secreatery of general director :-) |
thanks allen, might work .... | |
but still - should I fill RAMBO bug? Imo rebol should add empty quotes automatically, if the line ends with ; | |
Allen 22-Jun-2005 [248] | Put it in for Carl to decide. Mention the work around too |
Pekr 22-Jun-2005 [249x2] | why are following quotes causing a trouble? I did not ask rebol to take them into accout? parse/all {test1 ;test2;"test3 "quoted""} ";" ["test1 " "test2" "test 3 " {quoted""}] that is really completly weird ... |
the only delimiter I asked rebol to use was semicolon, so everything following test2; should be one element ... | |
Allen 22-Jun-2005 [251x2] | That's a good one for the parse/all test suite. Rambo it. |
; same bug again here too. parse/all {a: b ":" c} ":" == ["a" { b "} " c"] | |
Pekr 22-Jun-2005 [253] | OK, submitting ... |
Allen 22-Jun-2005 [254] | ; would have expected == ["a" { b "} {" c}] |
sqlab 23-Jun-2005 [255] | I just remember, that this was discussed already. The solution was to use something like split: func [string delim /local tokens token] [ tokens: make block! 32 parse/all string [ any [copy token to delim (append tokens probe token) delim] copy token to end (append tokens token) ] tokens ] |
Vincent 23-Jun-2005 [256] | sqlab: if 'parse can't do it, 'parse can do it ;) |
Alek_K 6-Jul-2005 [257x3] | I have "(name1) - (name2) (result)" |
eg. {team one - team two 3,0-3,0} Any simple solution to split it ["team one" "team two" "3,0-3,0"]? | |
I've done such a rule: [copy x to "-" (team1: x) - any " " copy x to " " (team2: x) any [mark: alpha :mark copy x to " " (append team2 join x " ")] any " " x: digit to end (result: x)] | |
Chris 6-Jul-2005 [260x3] | How many possibilities are there for the values "team one" and "team two"? Could you use a team repository? -- |
teams: ["team one" | "team two"] chars-n: charset "0123456789" points: [1 4 chars-n "," 1 4 chars-n] score: [points "-" points] parse str [teams "-" teams score] | |
str: {team one - team two 3,0-3,0} ;-- natch | |
Tomc 7-Jul-2005 [263x2] | not really simple but: name: complement charset {1234567890-} score: [integer! "," integer! "-" integer! "," integer!] str: {team one - team two 3,0-3,0} rst: copy [] parse/all str [ 2 [copy token some name(append rst trim token) opt "-"] copy token score (append rst token) ] rst |
of course this would preclude names like "team were#1" | |
Alek_K 7-Jul-2005 [265] | Thank You, it's nice to see such a pretty solutions :) |
Ingo 3-Aug-2005 [266] | What are the recursion limits on 'parse? Because I just hit it in the imap:// protocol ... |
Rebolek 3-Aug-2005 [267x2] | Ingo I made simple test and it seems it's something like 512 |
x: copy [] loop 1000 [append x 1] i: 0 rule: [number! (i: i + 1 print i) rule] parse x rule | |
Ingo 3-Aug-2005 [269x2] | <Slaps his head> Thanks! I could have thought about just trying it myself ;-) |
Well, I'll have to try to rewrite the parse rules, then. 512 is by far not enough in this case. | |
Tomc 3-Aug-2005 [271x2] | the parse limit it will vary with platform |
arrg not awake ... recursion limit | |
Ingo 3-Aug-2005 [273] | make that parse recursion limit, the limit on recursions for functions is a _lot_ higher (at least on winxp, view 1.3.1) |
shadwolf 13-Aug-2005 [274x2] | I have some problems to translate RULE based on PERL regular expression to rebol parse rules. Maybe this group can help me. For example: PERL REGULAR EXPRESSION RULE: [[ c ]] (e|è|é|ê|i|î|y) -> s we need to match the #"c" char and test the next char to know if we trap S phonem. example "Ce" must be emited S et E. I plan to have 2 rules rule: [ .../... "c" etc... | "e" etc... ] More complicated rule: an [[ c ]] T -> like for "banc" |
CLASS V [aeiouàâéèêëîïôöùûü] # voyelles CLASS C [bcçdfghjklmnñpqrstvwxyz] # consonnes CLASS L (V|C) # toutes les lettres CLASS P [\,\.\;\:\!\?] # ponctutions CLASS N [0123456789] # chiffres CLASS W [_&\']+ # espace CLASS S (^|W|P) # limite gauche d'un mot CLASS T ($|W|P) # limite droite d'un mot | |
Volker 13-Aug-2005 [276x2] | s: "Hello cè World" es: charset[#"e" #"è"#"è"#"ê"#"i"#"î" #"y"] parse/all s [ to "c" p: skip es p2: ( p: change/part p "s" p2 ) :p ] ? s |
questions: -long string? then better copy instead of change/part -more patterns in same path, then not 'to. | |
shadwolf 13-Aug-2005 [278] | Volker that's not what I want to get ... I'm seeking a rebol ruke that allow me to test the character after a key char example #"c" but keeping it into the parsing stack |
Volker 13-Aug-2005 [279] | you know p: and :p in parse-rules? |
shadwolf 13-Aug-2005 [280] | k I will try it thank u :) |
BrianW 13-Aug-2005 [281] | yargh. I know how to split with a single character as the delimiter: chunks: parse/all text "^/" How do I split where a blank line (2 newlines with nothing in between) is the delimiter? The naive solution I can think of just doesn't work: chunks: parse/all text "^/^/" |
Graham 13-Aug-2005 [282x2] | you can make up a rule. |
lines: copy [] rule: [ copy txt to "^/^/" (append lines txt) skip 2 ] parse mytext [ some rule ] untested ... | |
BrianW 13-Aug-2005 [284] | I get lost trying to find a good way to describe my rule. Here's the bad code that states my intent, but doesn't work ('parse doesn't seem to like having that 'until in there) chunks: parse/all text [ until [ chunk: copy "" copy chunk to "^/^/" skip if chunk [ append chunks chunk ] ] ] |
Graham 13-Aug-2005 [285] | ummm.. don't think you can do that |
BrianW 13-Aug-2005 [286] | nope, I discovered that :-D |
Graham 13-Aug-2005 [287x2] | parse expects to see a parse dialect if you following it with a block |
try my way ... | |
older newer | first last |