r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Rebol School] Rebol School

BrianH
23-Sep-2010
[3257]
>> to-word parse a [return to " "]
== ??

It will be faster than LOAD/next, trust me. Might be slower than 
TRANSCODE/next though.
PatrickP61
23-Sep-2010
[3258]
Parse is very fast I guess??
BrianH
23-Sep-2010
[3259x2]
Yes, but TRANSCODE is faster. However, TRANSCODE only works on UTF8 
binary, so when you add the binary conversion the PARSE method ends 
up being marginally faster.
>> dp [first transcode/next to-binary a]
== make object! [
    timer: 0:00:00.000013
    evals: 15
    eval-natives: 6
    eval-functions: 2
    series-made: 4
    series-freed: 1
    series-expanded: 1
    series-bytes: 570
    series-recycled: 0
    made-blocks: 2
    made-objects: 0
    recycles: 0
]

>> dp [to-word parse a [return to " "]]
== make object! [
    timer: 0:00:00.000012
    evals: 17
    eval-natives: 5
    eval-functions: 2
    series-made: 2
    series-freed: 0
    series-expanded: 0
    series-bytes: 435
    series-recycled: 0
    made-blocks: 1
    made-objects: 0
    recycles: 0
]

>> b: to-binary a
== #{
3F3F20202020202020202020202020202020202020204465627567207072696E
74206120776F72642C20706174682C206F7220626C6F2E2E2E
}

>> dp [first transcode/next b]
== make object! [
    timer: 0:00:00.00001
    evals: 11
    eval-natives: 5
    eval-functions: 1
    series-made: 3
    series-freed: 1
    series-expanded: 1
    series-bytes: 512
    series-recycled: 0
    made-blocks: 2
    made-objects: 0
    recycles: 0
]
PatrickP61
23-Sep-2010
[3261x2]
Will ECHO write a file in UTF-8 and so allow me to use TRANSCODE?
I guess I could just try it out
BrianH
23-Sep-2010
[3263]
But remember, READ/lines and all line-oriented stuff works with strings, 
not binary. You might be better off working with PARSE.
PatrickP61
23-Sep-2010
[3264x2]
Hey, this worked!

first transcode/next read %tmp.txt


!        <-- which is the first function name in my temporary file

Now, how do I get the first literal for each line???  Parse??
Here is what I have so far in my attempt to capture ONLY the function 
names in Rebol:

echo %tmp.txt 
what () 
echo none 
funct-list: first transcode/next read %tmp.txt


Not exactly sure how to go through all the records in %tmp.txt yet
BrianH
23-Sep-2010
[3266]
map-each x read/lines %tmp.txt [to-word parse x [return to " "]]
PatrickP61
23-Sep-2010
[3267x2]
Thank you very much BrianH and Steeve.  I appreciate it
Here is the completed script to get only Function names (nothing 
else) in a file:

echo %tmp.txt 
what () 
echo none 
funct-block: read/lines %tmp.txt

funct-names: map-each x funct-block [to-word parse x [return to " 
"]]
write/lines %Funct.txt funct-names
BrianH
23-Sep-2010
[3269x2]
funct-names: sort map-each [w v] to-block system/contexts/exports 
[either any-function? :v [to-word w] [()]]
WHAT gets its words from the system/contexts/exports object. MAP-EACH 
takes a block, so the object is converted to a block. The :v is equivalent 
to GET/any 'v in R3. The () in the second EITHER block is to generate 
an unset! value, which will cause MAP-EACH to not add a value to 
the block for that round. And SORT sorts words in R3.
PatrickP61
23-Sep-2010
[3271x2]
The ECHO was quick and dirty.  Your solution is, of course, better 
since it is getting the values directly as opposed to using ECHO. 
 Thanks BrianH
Hi everyone,


 I would really like to be able to capture some text from an html 
 webpage into a block.  Looking at Carl's cookbook at www.rebol.net/cookbook/recipes/0041.html 
 , he has a tiny script called "Tiny HTML to Text converter".


So I thought I could try it in R3, but alas, the /markup refinement 
doesn't seem to be defined.  


What would you suggest I use instead to capture a webpage text using 
R3?
BrianH
23-Sep-2010
[3273x2]
Are you using a107? If so, try this:
>> decode 'markup to-binary "<html>blah</html>"
== [<html> "blah" </html>]
Note that it works on binaries, not strings, so just use plain READ. 
We haven't made a nice mezzanine wrapper for it yet. Bringing back 
the LOAD/markup option is unlikely (LOAD is too complex already) 
but a simple LOAD-MARKUP function is likely.
PatrickP61
23-Sep-2010
[3275x2]
Hi Brian,  Man, do you ever sleep -- you were up late last night, 
or are you somewhere around the globe?  Yes the Decode did work when 
I did this:


html-blk: decode 'markup to-binary read http://www.rebol.com/docs/reference.html


Is there an easy way to parse out the html stuff and get ONLY the 
text parts?
I am guessing I could use "remove-each item html-blk [tag? item] 
 .. I'll give it a try.
Maxim
23-Sep-2010
[3277x2]
remove-each item html-blk [tag? item]
hehe
PatrickP61
23-Sep-2010
[3279]
lol
Maxim
23-Sep-2010
[3280]
confirmed... you are now an official reboler  (why are you using 
Rebol School ;-)
BrianH
23-Sep-2010
[3281]
You could even remove the TO-BINARY from your code - READ returns 
a binary.
PatrickP61
23-Sep-2010
[3282]
I am soooo intimidated by all you expert rebolers -- I'm just playing 
around getting the hang of it!
BrianH
23-Sep-2010
[3283x2]
Everyone needs to ask a question here now and again, even if it's 
rhetorical. Rebol School and I'm New are for everyone :)
Yes, I do sleep, during the morning (in my time zone). I'm a late-night 
guy.
PatrickP61
23-Sep-2010
[3285x3]
My only excuse is that my wife and I had a fight, and so instead 
of the couch, I opted for my chair!
Man, I absolutly love how powerful Rebol is!  It is just amazing
Ok, I captured the Rebol Quick Reference webpage, and I've removed 
all html tags.  I now have a lot of individual newlines values inside 
my block. To remove them I tried this:

remove-each item html-blk [newline item]

to which I got == 944

Then I tried to see it's values:

html-blk
== []


I guess I deleted all the remaining items huh.  What did I do wrong?
Maxim
23-Sep-2010
[3288x2]
the remove-each is returning a "truthy" value (not false or none).
I guess its missing an =  :-)
BrianH
23-Sep-2010
[3290]
remove-each item html-blk [item = "^/"]
PatrickP61
23-Sep-2010
[3291x3]
OHHHHHH, so my condition was true for all  I see!
Much better!
If I want to remove all items which are either a blank space OR a 
newline, could I do this:

remove-each item html-blk [ item = any [ " " "^/" ] ]


It didn't do what I thought it would, Is there a better way to state 
it?
Sunanda
23-Sep-2010
[3294]
Does this do the trick?
    remove-each item html-blk [ find [ " " "^/" ] item]
PatrickP61
23-Sep-2010
[3295]
Why didn't item = any [ val1 val2] work?  How should I be stating 
something like this?
BrianH
23-Sep-2010
[3296]
The ANY is calculated independently of the = and first too. So that 
is equivalent to item = " ".
Sunanda
23-Sep-2010
[3297]
You'd've had to have written it
  any [item = " " item = "^/"]
PatrickP61
23-Sep-2010
[3298x2]
Sunanda, your trick did work.

Ok, so then ANY of [something] will return true when something is 
satisfied, but just stating it the way I did, it was always true 
because there was no real condition -- so I should always state ANY 
[with the full conditions inside]  right?
I don't think I communicated that well
BrianH
23-Sep-2010
[3300]
No, that makes sense. You got it.
PatrickP61
23-Sep-2010
[3301]
Oh God, the Rebolers understand me -- I must be starting to talk 
Rebol now!!! ha
Sunanda
23-Sep-2010
[3302]
I understand :)
  ANY is really a short-cut for OR, so:
  if any [a = 1 b = 2] 
means
   if (a = 1) or (b = 2)
BrianH
23-Sep-2010
[3303]
But the trick is that with ANY it will only evaluate the expressions 
until it finds the first TRUE? one, not the rest. With OR both the 
expressions are evaluated. ANY and ALL are used as control structures 
too.
Maxim
23-Sep-2010
[3304]
they're even more usefull in R3 now that more functions are none 
transparent  :-)
PatrickP61
23-Sep-2010
[3305]
Yes, so if I said something like DATA: ANY [ val1 val2] then the 
first non empty value would be set to DATA right?
Maxim
23-Sep-2010
[3306]
first true? value (not none not fase)