[REBOL] Formatting a display line
From: Steven:White:ci:bloomington:mn:us at: 4-Nov-2003 15:57
This must be something really dumb, but I am wondering if perhaps I am
not understanding how something works.
The purpose of the script below is to go through a block of blocks (a
little "file" of "records" in my native tongue) and, for each record,
rearrange the "fields" with some spaces in them, suitable for
displaying. It builds up this displayable line in the item called
FORMATTED-LINE.
On line 1111 of the script, the first item (number four = "THIS") is
added to FORMATTED-LINE, and on line 2222 the FORMATTED-LINE is
displayed to show that it is correct. On line 3333, a procedure is
called to fill the line out to 10 spaces.
In the procedure to add the spaces, at line 4444, suddenly
FORMATTED-LINE is different; it contains the field just added, PLUS the
data the is not due to be added until line 5555. In other words, on
line 2222 FORMATTED-LINE is "THIS" and on line 4444 it is "THISIS", but
the IS is not supposed to be added until line 5555, AFTER the script has
returned from adding the spaces after THIS.
Am I losing my mind or what?
Thank you.
Steven White
[steven--white--ci--bloomington--mn--us]
script follows--may be cut, pasted, and run:
REBOL [
]
DATA-SELECTED: [
[ "TEST" "A" "IS" "THIS" ]
[ "WORK" "THIS" "WON'T" "WHY" ]
]
DATA-FORMATTED: none
FORMATTED-LINE: none
TEST-PROCEDURE: does [
DATA-FORMATTED: copy ""
foreach DATA-RECORD DATA-SELECTED [
FORMATTED-LINE: copy ""
PRINT ["APPENDING " FOURTH DATA-RECORD]
append FORMATTED-LINE fourth DATA-RECORD ;; 1111
PRINT ["FORMATTED LINE NOW IS " FORMATTED-LINE] ;; 2222
ADD-FILLER (10 - length? FORMATTED-LINE) ;; 3333
;;;;;;;; PRINT ["APPENDING " THIRD DATA-RECORD] ;; UNCOMMENTING
GIVES ERROR
append FORMATTED-LINE third DATA-RECORD ;; 5555
PRINT ["FORMATTED LINE NOW IS " FORMATTED-LINE]
ADD-FILLER (20 - length? FORMATTED-LINE)
append FORMATTED-LINE second DATA-RECORD
ADD-FILLER (30 - length? FORMATTED-LINE)
append FORMATTED-LINE first DATA-RECORD
append FORMATTED-LINE newline
append DATA-FORMATTED FORMATTED-LINE
]
]
ADD-FILLER: func [
"Add a specified number of blanks to FORMATTED-LINE"
SPACE-COUNT integer!
] [
PRINT ["NOW WE WILL ADD " SPACE-COUNT " SPACES"]
loop SPACE-COUNT [
append FORMATTED-LINE " " ;; 4444
PRINT ["FORMATTED LINE IS " LENGTH? FORMATTED-LINE "
BYTES:" FORMATTED-LINE]
]
]
TEST-PROCEDURE
PRINT DATA-FORMATTED