I'd forgotten that in J6.02, whose beta will be available soon,
the phrase p {~ q i. ] where p and q are strings, is supported
by special code. Exploiting this phrase:
map=: (a.{~128 (23 b.) i.256) {~ a. i. ]
scramble2=: 3 : 0
(map read <y) write <y,'.scrambled'
)
ts 'scramble2 ''\junk\foo'''
0.0393609 4.1975e6
ts 'scramble2 ''\junk\foo1'''
0.0396972 4.19763e6
----- Original Message -----
From: Roger Hui <[EMAIL PROTECTED]>
Date: Monday, September 24, 2007 17:37
Subject: Re: [Jprogramming] ASCII bytes to string
To: Programming forum <[email protected]>
> Sorry, it should be
> (t,'x') write <'\junk\foox'
> instead of
> (t,x) write <'\junk\foox'
>
>
>
> ----- Original Message -----
> From: Roger Hui <[EMAIL PROTECTED]>
> Date: Monday, September 24, 2007 17:35
> Subject: Re: [Jprogramming] ASCII bytes to string
> To: Programming forum <[email protected]>
>
> > Doing things 4 bytes at a time. Leaner and somewhat faster.
> > The improvement is greatest if the file size is a multiple of 4.
> >
> > read =: 1!:1
> > write =: 1!:2
> >
> > scramble =: verb define
> > ((128 (23 b.) a. i. read <y) { a. ) write <y,'.scrambled'
> > )
> >
> > mask=: {. _2 (3!:4) 4$128{a.
> >
> > scramble1=: 3 : 0
> > if. 4|#t=. read <y do.
> > ((#t) {. mask&(23 b.)&.(_2&(3!:4)) t,(4|-#t)$'a') write
> > <y,'.scrambled' else.
> > ( mask&(23
> > b.)&.(_2&(3!:4)) t ) write <y,'.scrambled'
> > end.
> > )
> >
> > t=: read <'\j601\j.dll'
> > #t
> > 1314816
> >
> > t write <'\junk\foo'
> > (t,x) write <'\junk\foox'
> >
> > ts=: 6!:2 , 7!:[EMAIL PROTECTED]
> >
> > ts 'scramble ''\junk\foo'''
> > 0.0657209 2.0975e7
> > ts 'scramble1 ''\junk\foo'''
> > 0.0439592 6.2953e6
> >
> > ts 'scramble ''\junk\foox'''
> > 0.0669867 2.09751e7
> > ts 'scramble1 ''\junk\foox'''
> > 0.0500449 8.39341e6
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm