Hello folks,

Here's another newbish type question. I've never really gotten my head
around block/series manipulation in Rebol. As a result of this my code
is full of silly hacks that keep building temporary data structures to
get the results I want.

I was hoping that someone may help my cog drop into place so I can
write some decent Rebol at last.

Here's a typical problem;

Let's say we have a file which is full of cars and the colours they
are available in;

"Saloon" "Red"
"Coupe" "Red"
"Coupe" "Yellow"
"Pickup Truck" "Red"
"Pickup Truck" "Yellow"
"Pickup Truck" "Orange"
"Pickup Truck" "Blue"

Now what if I want to scan through this file and build up a list of
cars but then just state which colours they are available in after in
the structure. I'll assuming an elegant format is this;

FinalData: make block! [
   "Saloon" ["Red"]
   "Coupe" ["Red" "Yellow"]
   "Pickup Truck" ["Red" "Yellow" "Orange" "Blue"]
   ]

So, reading the file is easy enough.

CarLines: read/lines %file

foreach CarLine CarLines [
  Car: pick (parse CarLine none) 1
  Colour: pick (parse CarLine none) 2
  ;
  ; ???
  ;
  ]

The question is, how do I create final data? I can do a find on the
FinalData to see if a car is there already. But all this does is
return the data after. I've always been puzzled about the lack of a
word/function to return the position in a series/block of a find,
if found.

So anyhow, here's the best I can think of;

either found? find FinalData Car [
  ; Already have an entry for this car...
  ; Select at least allows retrieving of the block following our
  ; found element easily...
  ;
  existingcolours: select FinalData Car
  ;
  ; Great so add the new colour to the existing colours
  ;
  append existingcards Car
  ;
  ; But how do we poke it back? We don't have a position to do a poke?
  ;
  ????
  ][
  ;
  ; Plug in the new car, plug in the block which has the colour in it
  ;
  append FinalData Car
  append FinalData reduce[reduce[Colour]]
  ]

I don't really understand the block navigation issues to solve this
problem or to somehow poke more data in without having a position.

As usual any stupid stuff I've missed and elegant solutions
gratefully received.

Regards,

Mat Bettinson

-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to