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

Reply via email to