World: r3wp
[Parse] Discussion of PARSE dialect
older newer | first last |
Graham 6-Jan-2010 [4801x4] | false is the value returned by the parse function |
if you want the value you have to change the parse rule | |
umm.. parse returns either true or false ... | |
true if the rule completes to the end, false otherwise | |
BenBran 6-Jan-2010 [4805] | ok I see. Thanks. |
BrianH 6-Jan-2010 [4806] | Was going to reply but Graham types faster :) |
Graham 6-Jan-2010 [4807] | parse buffer [ "get" [ "http" | "/" | copy file to #" " ( print file) ] to end ] will return true |
BrianH 6-Jan-2010 [4808x3] | PARSE returns true if the rule matches and covers the entire input, or false otherwise. Your rule matched but there was input left over. PARSE's return value doesn't matter in this case, just whether file is set or not. If you are using R3 you can do this too: parse buffer [ "get" [ "http" | "/" | return to " "]] |
That would return the file instead of setting a variable and not return false because of leftover input. | |
>> parse "GET /a.html HTTP/1.1" ["get " return to " "] == "/a.html" Note that /all is the default in R3 so you need to specify space after GET. | |
BenBran 6-Jan-2010 [4811] | for completeness in R3 - I tried the lines above: >> parse "GET /a.html HTTP/1.1" ["get " return to " "] ** Script Error: Invalid argument: ?native? ** Where: halt-view ** Near: parse "GET /a.html HTTP/1.1" ["get " return to " "] I must be missing something simple |
BrianH 6-Jan-2010 [4812] | What version of REBOL are you using? system/version ... |
BenBran 6-Jan-2010 [4813] | >> help system SYSTEM is an object of value: version tuple! 2.7.7.3.1 build date! 1-Jan-2010/12:15:27-8:00 product word! View core tuple! 2.7.7 components block! length: 60 |
BrianH 6-Jan-2010 [4814] | That is R2, not R3. |
BenBran 6-Jan-2010 [4815] | doh! |
BrianH 6-Jan-2010 [4816] | You were right, it was something simple :) |
BenBran 6-Jan-2010 [4817x2] | lol :-) |
yes it works perfect in R3. Thanks again. | |
Graham 14-Jan-2010 [4819] | >> parse [ <tag> ] [ copy t tag! ] == true >> t == [<tag>] never noticed it made a block! before |
ChristianE 14-Jan-2010 [4820x5] | >> parse [ <tag> ] [ set t tag! ] == true >> t == <tag> |
There's a difference between COPY and SET in block parsing mode. | |
From the docs: SET - set the next value to a variable COPY - copy the next match sequence to a variable | |
Good the remember when dealing with "sequences": >> parse [ <tag> </tag> ] [ copy t [ tag! tag!] ] == true >> t == [<tag> </tag>] >> parse [ <tag> </tag> ] [ set t [ tag! tag!] ] == true >> t == <tag> | |
the = to. | |
Graham 14-Jan-2010 [4825] | I've always used 'set ... not sure why I used 'copy this time! |
Graham 29-Jan-2010 [4826x3] | <?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SelectResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/"><SelectResult><Item><Name>2010-01-29T09:54:48.000ZI3s3NjIxRjZERDI1MUY0QzQyMDk4M0JDMzkwMERGOEQxQTVDRDY5MzEwfQ==</Name><Attribute><Name>Subject</Name><Value>hello?</Value></Attribute><Attribute><Name>Userid</Name><Value>Guest</Value></Attribute><Attribute><Name>UTCDate</Name><Value>2010-01-29T09:54:48.000Z</Value></Attribute></Item><Item><Name>2010-01-29T09:58:36.000ZI3swMTZBODg3QjAxNDQ2NEU5OENCNTA3OTc5OTg0Mjc1MTJGQzkxQTc0fQ==</Name><Attribute><Name>Subject</Name><Value>First Message</Value></Attribute><Attribute><Name>Userid</Name><Value>Graham</Value></Attribute><Attribute><Name>UTCDate</Name><Value>2010-01-29T09:58:36.000Z</Value></Attribute></Item><Item><Name>2010-01-29T11:06:18.000ZI3tFREFCRUYwNTY4OTdBMzcwODM2NzJGQUE5MzAwRUE3NjYwMTMwMTY5fQ==</Name><Attribute><Name>Subject</Name><Value>Index working</Value></Attribute><Attribute><Name>Userid</Name><Value>Graham</Value></Attribute><Attribute><Name>UTCDate</Name><Value>2010-01-29T11:06:18.000Z</Value></Attribute></Item></SelectResult><ResponseMetadata><RequestId>14873461-626a-44bf-2d7d-c1b23694b2e0</RequestId><BoxUsage>0.0000411449</BoxUsage></ResponseMetadata></SelectResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> |
results: copy [] parse result [ thru <SelectResult> some [ thru <Item> copy item to </Item> ( ?? item if parse item [ thru <Name> copy itemid to </Name> thru {<Name>Subject</Name>} thru <Value> copy subject to </Value> thru {<Name>Userid</Name>} thru <Value> copy userid to </Value> thru {<Name>UTCDate</Name>} thru <Value> copy utcdate to </Value> to end ][ repend results [ utcdate itemid userid subject ] ] ) ] ] | |
This parse works fine in R2, but doesn't work in R3 ... I coudn't see why last night ... still can't ... | |
Steeve 29-Jan-2010 [4829x3] | Is that result a block or string ? |
because in a string you can't find tag! values | |
i'm wrong T_T | |
Graham 29-Jan-2010 [4832] | It's a string ... |
Steeve 29-Jan-2010 [4833] | but i'm still wrong ;-) |
Graham 29-Jan-2010 [4834x2] | Yes, tags are a type of string ... |
this is what I get for item e>2010-01-29T11:06:18.000ZI3tFREFCRUYwNTY4OTdBMzcwODM2NzJGQUE5MzAwRUE3NjYwMTMwMTY5fQ==</Name><Attribute><Name>Subject</Name><Value>Index working</Value></Attribute><Attribute><Name>Userid</Name><Value>Graham</Value></Attribute><Attribute><Name>UTCDate</Name><Value>2010-01-29T11:06:18.000Z</Value></Attribute> | |
Steeve 29-Jan-2010 [4836x2] | >> parse "<a><item>" [thru <a> ??] end!: "item>" == false |
a bug | |
Graham 29-Jan-2010 [4838] | I'm not familiar with that ... what should it say? |
Steeve 29-Jan-2010 [4839x2] | It should say: >> parse "<a><item>" [thru <a> ??] end!: "<item>" == false |
parsing thru a tag eat one more char | |
Graham 29-Jan-2010 [4841] | Ah .. ?? is a new debugging function |
Steeve 29-Jan-2010 [4842] | yep |
Graham 29-Jan-2010 [4843x2] | Should have known about it last night! Would have saved me sometime :( |
Well, this looks like an unreported bug ... | |
Steeve 29-Jan-2010 [4845] | exactly |
Graham 29-Jan-2010 [4846] | Shall you or I curecode it? |
Steeve 29-Jan-2010 [4847x2] | you |
;-) | |
Graham 29-Jan-2010 [4849x2] | okey dokey |
Now I know I can't use r3 for parsing xml .... :( http://www.curecode.org/rebol3/ticket.rsp?id=1449 | |
older newer | first last |