Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search

[REBOL] Re: Using "repeat" in write/append/lines

From: greggirwin:mindspring at: 4-May-2004 14:25

Hi Stuart, Tom gave you the best general answer, using REPEAT *around* the calls you want to make, so I'll just chime in with a note. Disks are faster these days, but you probably don't want to use WRITE repeatedly if you're going to be making ten thousand calls that way. Instead, build up a string buffer and write the whole thing out at once, or in sections. INSERT/DUP handily creates a filled string: head insert/dup clear "" #"*" 10 which you could then wrap up in a function (named for your use here): ascii-bar: func [len /with fill] [ head insert/dup clear "" any [fill #"*"] len ]
>> ascii-bar 5
== "*****"
>> ascii-bar 15
== "***************"
>> ascii-bar/with 15 "."
== "..............."
>> ascii-bar/with 15 ".-"
== ".-.-.-.-.-.-.-.-.-.-.-.-.-.-.-" Here's the function, broken down. head ;- INSERT returns at the point *after* the insert/dup ; insertion, so we use HEAD to get the top. clear "" ;* Read up on how local series values are ; retained in functions. any [ ;- ANY is like a list of OR clauses fill ;- If FILL (e.g.) is none, it will go on to #"*" ; the next item in the block, until it finds ] ; a non-none/non-false value. len ;- This is the value for the DUP refinement HTH! -- Gregg