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

World: r3wp

[Rebol School] Rebol School

PatrickP61
18-Jul-2007
[552x3]
In-port:	open/lines In-file
 while [not tail? In-port] [
	print In-port
	In-port:	next In-port
	]

 close In-port
This is not doing what I want.  

I want it to continue to run through all  lines of a file and print 
it
My goal is to be able to control how much of a file is loaded into 
a block then process the block and then go after the next set of 
data.  That is why I am using PORT to do this function instead of 
reading everything into memory etc.
Geomol
18-Jul-2007
[555x2]
Change the print line to:
print first In-port
I think, your code print the port specs and everything.
PatrickP61
19-Jul-2007
[557]
Yes, It does dump a lot of stuff that I don't kow about!!!
btiffin
19-Jul-2007
[558x2]
Ports are nifty little objects.  :)  And if you just type
>> In-port
 you get back nothing, just another prompt.
>>

The interpreter does not display the internals of objects, but print 
does, so what you are seeing is the object! that is In-port.  Well, 
I'm lying...In-port is a port!  not an object!  Close but not the 
same.  ports emulate a series! wrapped in object! wrapped in enigma. 
 Or is it an object! wrapped in a series! disguised as a sphynx? 
 :)


first In-port is a REBOL reflective property feature that when you 
get it, you'll go "Ahhhh" as you step closer to the Zen of REBOL.

For fun with a really big object!  try >> print system
Oh, by the way...we added to the %form-date.r script in the library. 
  See I'm New for details.
PatrickP61
20-Jul-2007
[560]
Another question -- I know to use escape to insert things like a 
tab as in ^(tab) into a string.
What can I use to insert a newline?  ^(newline) doesn't work.
Geomol
20-Jul-2007
[561x3]
str: ""
insert str newline
If you just write NEWLINE in the prompt, you'll see how it's defined. 
You can specify a newline in a string as
str: "a string with a newline: ^/"
A tab can also be specified as: "^-"
PatrickP61
20-Jul-2007
[564]
Perfect!   ^/ works just great!
Geomol
20-Jul-2007
[565]
It's a bit strange, that ^(newline) doesn't work, now that ^(tab) 
does. Maybe it was just forgotten.
PatrickP61
20-Jul-2007
[566]
As a newbie, it seemed natural to try ^(newline), but the shortcut 
^/ works for me too.
Geomol
20-Jul-2007
[567]
Unfortunately there are some strange things in the corners of REBOL, 
but you'll learn to live with it.
PatrickP61
20-Jul-2007
[568]
:-)
Geomol
20-Jul-2007
[569]
Now you're at it, check http://www.rebol.com/docs/core23/rebolcore-16.html#section-2.11
and http://www.rebol.com/docs/core23/rebolcore-8.html
for info about strings in REBOL.
PatrickP61
20-Jul-2007
[570]
Just what I needed!!!
Geomol
20-Jul-2007
[571]
Ah, there's the explanation, a newline can be specified as ^(line)
(for some reason)
PatrickP61
20-Jul-2007
[572]
Ahhhhh
Gregg
20-Jul-2007
[573]
More reference info here: http://www.rebol.com/docs/core23/rebolcore-16.html#section-3.1

And you also have the words CR, LF, and CRLF available.
PatrickP61
26-Jul-2007
[574]
My teachers,  I have an array ( block (of "lines") within a block 
(of values) ) that I would like to convert to a block (of "lines") 
with all values joined with an embedded tab.  What is the best way 
to achieve this?  See example: 


In-array:      [   [   {Col A1}     {Col B1}   ]        <-- I have 
this
                          [   {2}              {3}             ]
                          [   {line "3"}    {col "b"}    ]   ]


Out-block:   [   {Col A1^(tab)Col B1}             <-- I want this 
                         {2^(tab)3}
                         {line "3"^(tab)col "b"}         ]
Rebolek
26-Jul-2007
[575]
>> out-block: copy []
== []

>> foreach line in-array [append out-block rejoin [line/1 "^-" line/2]]
== ["Col A1^-Col B1" "2^-3" {line "3"^-col "b"}]
Anton
26-Jul-2007
[576x2]
in-array: [["Col A1" "Col B1"]["2" "3"][{line "3"} {col "b"}]]

out-block: copy [] 
foreach blk in-array [
	line: copy "" 
	repeat n -1 + length? blk [append append line blk/:n tab]
	if not empty? blk [append line last blk]
	append out-block line
]
new-line/all out-block on
== [
    "Col A1^-Col B1"
    "2^-3"
    {line "3"^-col "b"}
]
PatrickP61
26-Jul-2007
[578]
Anton, what does the new-line/all do.  I gather it inserts newlines 
after each value.  Is that right?
Volker
26-Jul-2007
[579]
it cleans up rebol-listings
PatrickP61
26-Jul-2007
[580]
Forgive me,  how does it do that?
Volker
26-Jul-2007
[581x2]
else all strings would be on one line. only interesting for probing 
rebol-code, does not change the strings itself
there is a hidden markerin values, for newline
PatrickP61
26-Jul-2007
[583]
So if i read you right, then if I didn't do new-line/all, and tried 
to probe Out-block, it would show the entire contents as one large 
string, whereas new-line/all will allow probe to show each value 
as a spearate line.  Right?
Volker
26-Jul-2007
[584x2]
as lots of strings in one line
and with the new-line all strings in own lines
PatrickP61
26-Jul-2007
[586x4]
I see how it works now  -- Thank you Anton and Volker!!
Thank you Reblek  -- didn't see your answer at first!
My teachers, Anton and Rebolek have submitted two answers.  The difference 
between them is that Anton's answer will insert a tab between varying 
numbers of  values per line, where Rebolek will insert a tab in-between 
col 1 and col2 (assuming only 2 columns in the array).  Is that a 
correct interpretation?
Anton, I understand Rebolek answer, but I want to understand your 
answer too.

 I'm wondering about the line: repeat N -1 + length? Blk [append append 
 Line Blk/:N tab]  

does Rebol do the inner append first  (in math expressions) like 
this:  [append ( append Line Blk/:N ) tab]
and then do this for the number of "lines" in the array
N	Out-block
0	[]
1	"Col A1^-Col B1"
2	"Col A1^-Col B1"	"2^-3"
3	"Col A1^-Col B1"	"2^-3"	{line "3"^-col "b"}


I think I see the above progression, but not sure about Blk [append 
Line last Blk]  Is this advancing the starting position within In-array?
Gregg
27-Jul-2007
[590]
...insert a tab between varying numbers of  values per line <versus> 
... insert a tab in-between col 1 and col2
 -- Correct.


On new-line, it's kind of advanced because it doesn't insert a newline 
(CR/LF), but rather a hidden marker between values that REBOL uses 
when molding blocks.
PatrickP61
27-Jul-2007
[591]
Hi Gregg -- Is that primarily for display purposes, or could it be 
used for other things?
Gregg
27-Jul-2007
[592x2]
On "append append", yes. You could also do it like this: "append 
line join blk/:n tab", the difference being that APPEND modifies 
its series argument, and JOIN does not.


REPEAT is 1-based, not zero, Anton is using "-1 + length? blk" rather 
than "(length? blk) - 1" or "subtract length? blk 1". The first of 
those cases requires the paren because "-" is an op! which will be 
evaluated before the length? func, so REBOL would see it like this 
"length? (blk - 1)", which doesn't work.
For display or formatted output. It's *very* useful when generating 
code for example.
PatrickP61
27-Jul-2007
[594]
Sounds like more advanced stuff than I'm understanding right now. 
 I'll read up on the terms. 

When I get REBOL code solution, I'd like to understand how Rebol 
is processing the code.  What it does logically first, and logically 
second... I think I get confused about when Rebol does the evaluations.
Gregg
27-Jul-2007
[595x3]
You shouldn't have to worry about new-line at all. It's actually 
relatively new, so we all lived without it for a long time.
It can be confusing at times, and even once you know what you're 
doing, you sometimes have to think about it a bit. The up-side is 
that you have a great deal of control once you know how to use it.
I should point out that NEW-LINE, as Anton used it, is a handy shortcut 
that takes the place of foreach+print for simple console display.
PatrickP61
27-Jul-2007
[598]
I am looking forward for the Rebol lightbult to go on full power!!! 
 I think it just takes me playing around with rebol more to get there!
[unknown: 9]
27-Jul-2007
[599]
Yes...that will happen.  The best way is to try to teach what you 
know now to someone else.  To Teach is to learn.
Geomol
27-Jul-2007
[600]
Patrick, before I started with REBOL, I had many years of experience 
with many different languages, both as a hobby and professional. 
It wasn't hard for me to grasp new languages, because every new one 
always reminded me of some other language, I already knew. Then I 
came to REBOL, and I could make small scripts after a few days. But 
it took me more than a year to really "get it". And it's just the 
best language, I've ever programmed in. It keeps amaze me after all 
these years, and I constantly find new things, new ways of doing 
things. From your posts here, you're having a very good start, as 
I see it. Just keep hacking on that keyboard, and don't forget to 
have fun!
btiffin
27-Jul-2007
[601]
Patrick; Check out http://www.rebol.org/cgi-bin/cgiwrap/rebol/art-display-article.r?article=lf019t
 It's an experiment in rebol.org hosting public wiki articles.  Plus 
I'm plugging my own work  :)