[REBOL]
[1/2] from: gerardcote::sympatico::ca at: 1-Jun-2005 15:27
Hello list,
I need some help here since I can't work the copy/part correctly with words instead of
numbers.
The problem I'm working on:
-----------------------------
While working on a mimicked rebol version of the awk or C "printf" instruction somewhere
I have to convert binary numbers in octal,
decimal and hexadecimal. During this process I have to assemble binary digits into chunks
of 3 or 4. This is what the following code
does - here for chunks of 3 since the code part for the hexa is done separately for now.
The code also pads to the left with0 when
Value length is not a multiple of 3.
Example: Value: "12345678" -> first padded to "012345678" and sliced to 678 345 012
Eventually the numbers will be 0 and 1 but for testing it is easier to use decimal numbers
to keep positions aligned.
So the code below works well for a binary to octal assembly - at least for some samples.
The difficulty I have is the following :
the copy/part doesn't accept the fact that if replace the last parameter (number 3) by
its equivalent valued word "grouping" which
is defined as number 3 (defined as grouping: 3).
I've tried to compose the complete line and do it after but this never worked for the
entire script. However this worked well on
smaller oneliner examples. I don't know why and can't explain this kind of anomaly (from
my beginnners eyes at least).
Can someone help ? Thanks in advance
value: "12345678"
val-length: length? value
grouping: log-2 dest-base ; Since source-base is 2 (defined elsewhere)
reste: val-length // grouping ; Length of padding based on this
value
if reste <> 0 [
insert/dup value "0" (grouping - reste) ; Left padding done here
head value
]
c: length? value
while [c >= grouping] [
slice: copy ""
slice: copy/part at value (c - grouping + 1) 3 ; <- This 3 is to be replaced with
the word
print ["slice: " slice] ; "grouping"
; remove/part at value c - 3 3
c: c - grouping
]
[2/2] from: cyphre::seznam::cz at: 1-Jun-2005 20:22
Re: (No Date: Wed, 1 Jun 2005 21:47:50 +0200
Hello Grerard,
I'm not sure if I understood your problem but from my quick console session:
>> grouping: log-2 8
== 3.0
>> type? grouping
== decimal!
>> a: "123456789" copy/part a grouping
** Script Error: Invalid /part count: 3.0
** Near: copy/part a grouping
>> a: "123456789" copy/part a to-integer grouping
== "123"
>>
So basically copy doesn't like decimal numbers as a range argument(which is
logical to me in this case)
regards,
Cyphre