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

World: r3wp

[Core] Discuss core issues

GrahamC
16-Feb-2011
[967x2]
or just modify the existing ftp client ... the formatting is a parse 
rule
ftp protocol ...
BrianH
16-Feb-2011
[969]
I meant, look at the listings directly, so you know what to look 
for when modifying that parse rule :)
Brock
16-Feb-2011
[970]
thanks for the input.  I'll see what I can do.
TomBon
22-Feb-2011
[971]
how to prevent binary data from spanning multiple lines?

this

 #{
    3A
    18
    92
    56
}

should be this

#{3A189256}

is this possible?
BrianH
22-Feb-2011
[972]
Afaik, binaries don't keep the info about how they were laid out 
on the page like blocks do. The whitespace won't be preserved when 
they are printed out. And there is no whitespace internally in the 
binary, just binary data.
TomBon
22-Feb-2011
[973x2]
according to the above example I would like to store the binary via 
a tcp.

any other possibility to transform the binary? while  using enbase 
I have 
also todo a dehex after retrieving. would like to avoid this.
the best would be if I could store just 3A189256 and then reform 
ist back to a binary.
is this in general possible brian?
GrahamC
22-Feb-2011
[975]
tombon, the binary is not spanning mulitiple lines .. that's just 
 a display issue?
TomBon
22-Feb-2011
[976x4]
unforunatly not. when I compose the value pairs to transmit there 
occur a crlf within. so the key/value just store #{
for example:

the store sequence is this

{key^-1
value^-#{
789CCBCA2E4EC9485348CC2ECE82D059C53960460E9005666465E74018C559D9
296919501A48A50000B5BE16913C000000
}
to lines separated by a tab for the key/value
is there any other compression which returns a string instead a binary?
GrahamC
22-Feb-2011
[980x3]
You can just form a binary ... to get a string
Mind blank ..anyone got a routine to trim a particular character 
from the end of a string?  I want to remove trailing pipe characters
I could reverse the string and then parse it using a charset .. but 
that seems crude ( any reason why the parse direction can not be 
made an option ? )
BrianH
22-Feb-2011
[983x4]
That's one of the proposals that hasn't been implemented yet.
Why not use FIND with the charset?
All trailing pipe characters? Do you want to remove any other characters 
other than | ?
>> b: charset [not "|"]
== make bitset! [not bits #{00000000000000000000000000000008}]
>> find/reverse/tail tail "abc|||" b
== "|||"
GrahamC
22-Feb-2011
[987x2]
looks like R3 to me!
I want to remove trailing |
BrianH
22-Feb-2011
[989]
For R2 you might need to complement the charset rather than using 
not.
GrahamC
22-Feb-2011
[990]
I didn't know you could use find with a charset
BrianH
22-Feb-2011
[991x2]
>> b: complement charset "|"
== make bitset! #{
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
}
>> next find/reverse tail "abc|||" b
== "|||"
>> head clear next find/reverse tail "abc|||" b
== "abc"
FIND/reverse/tail doesn't work in R2.
GrahamC
22-Feb-2011
[993]
I'll give it a go... ta
BrianH
22-Feb-2011
[994]
So you might need to do a bit of tweaking for the R2 version, but 
it's a start.
GrahamC
22-Feb-2011
[995]
is this being backported to R2?
BrianH
22-Feb-2011
[996]
FIND/reverse/tail works in R2, but not with charsets. It's a bug.
GrahamC
22-Feb-2011
[997x2]
as I thought ... no find with charsets
oh ... ooops
BrianH
22-Feb-2011
[999]
FIND works with charsets in R2, but the /tail option doesn't. It's 
a newly discovered (just now) bug.
GrahamC
22-Feb-2011
[1000]
just now ??
BrianH
22-Feb-2011
[1001]
Yeah. By me, just now, while I was doing this experiment.
GrahamC
22-Feb-2011
[1002]
neat
BrianH
22-Feb-2011
[1003]
Thanks :)
GrahamC
22-Feb-2011
[1004x4]
find/reverse tail a b only finds the first |
>> a
== "abcd|as|dsf|||||"

>> index? find/reverse tail a b
== 16
oops ...
no sleep :(
BrianH
22-Feb-2011
[1008]
That's where the CLEAR comes in :)
GrahamC
22-Feb-2011
[1009x2]
By George I think I've got it!
BTW, I think trim/with/tail should actually do this .. but trim/with 
removes characters inside the string.
BrianH
22-Feb-2011
[1011]
Yeah, for TRIM /with implies /all.
GrahamC
22-Feb-2011
[1012]
replace/all does the same ... so perhaps trim/with should be changed
Andreas
23-Feb-2011
[1013]
>> map-each a [] [1]
** Throw Error: Return or exit not in function
** Where: map-each
** Near: return any [output make block! 0]

>> system/version
== 2.7.8.4.2
BrianH
23-Feb-2011
[1014x3]
Darn, my bad. It's the [throw] function attribute. Don't worry, there's 
a way to reorganize the code so no RETURN is necessary.
Thanks for the report. I'll fix it in R2/Forward right away.
Here's a working version:

map-each: func [

 "Evaluates a block for each value(s) in a series and returns them 
 as a block."
	[throw catch]

 'word [word! block!] "Word or block of words to set each time (local)"
	data [block!] "The series to traverse"
	body [block!] "Block to evaluate each time"
	/into "Collect into a given series, rather than a new block"

 output [any-block! any-string!] "The series to output to" ; Not image!
	/local init len x
][
	; Shortcut return for empty data
	either empty? data [any [output make block! 0]] [
		; BIND/copy word and body
		word: either block? word [
			if empty? word [throw make error! [script invalid-arg []]]

   copy/deep word  ; /deep because word is rebound before errors checked
		] [reduce [word]]
		word: use word reduce [word]
		body: bind/copy body first word
		; Build init code
		init: none
		parse word [any [word! | x: set-word! (
			unless init [init: make block! 4]
			; Add [x: at data index] to init, and remove from word
			insert insert insert tail init first x [at data] index? x
			remove x
		) :x | x: skip (

   throw make error! reduce ['script 'expect-set [word! set-word!] type? 
   first x]
		)]]
		len: length? word ; Can be zero now (for advanced code tricks)
		; Create the output series if not specified
		unless into [output: make block! divide length? data max 1 len]
		; Process the data (which is not empty at this point)

  until [ ; Note: output: insert/only output needed for list! output
			set word data  do init

   unless unset? set/any 'x do body [output: insert/only output :x]
			tail? data: skip data len
		]
		; Return the output and clean up memory references
		also either into [output] [head output] (
			set [word data body output init x] none
		)
	]
]