[Jprogramming] ASCII bytes to string
bill lam
bbill.lam at gmail.com
Mon Sep 24 09:23:44 HKT 2007
The relatively poor performance of the ruby program seems to be a result of
looping writing one byte each time. Can ruby interpreter detect and optimize
that loop, or you have to reprogram it for a fair comparison.
William James wrote:
> At Mon Sep 24 01:01:12 HKT 2007, Joey K Tuttle wrote:
>
>> At 02:53 -0700 2007/09/23, William James wrote:
>>> Bjorn Helgason wrote:
>>>
>>>> 65 66 67{a.
>>> Thanks. I needed this to convert a simple program that
>>> was posted on the Ruby newsgroup to J.
>>>
>>> Here's a cleaned up Ruby version.
>>>
>>> def scramble( fname )
>>> _fname = fname + ".scrambled"
>>> data = IO.read( fname )
>>> File.open(_fname, "wb"){|ff|
>>> data.each_byte{|c| ff.write((c | 0x80).chr) }
>>> }
>>> end
>>>
>>> Here's my J version.
>>>
>>> read =: 1!:1
>>> write =: 1!:2
>>> scramble =: verb define
>>> ((128 (23 b.) a. i. read <y) { a. ) write <y,'.scrambled'
>>> )
>>>
>>> The J program is about 24 times as fast.
>>> The version I wrote in FreeBasic is 9 times as fast as J.
>>>
>> Interesting - what did your FreeBasic version look like?
>
> It's very verbose; the language is designed to be quite
> compatible with Microsoft's QBasic, although it has pointers and
> C-style macros. The executable is 27,648 bytes. (I hope we won't
> be tarred and feathered for being so off topic.)
>
>
> ' The comment character (') is almost invisible.
> sub scramble( filename as string )
> dim as integer in_handle, out_handle, i, size
> dim bytes(1 to 4096) as byte
>
> in_handle = freefile
> open filename for binary access read as in_handle
> out_handle = freefile
> open filename & ".scrambled" for binary access write as out_handle
> while not eof( in_handle )
> size = seek( in_handle )
> get #in_handle, , bytes()
> size = seek( in_handle ) - size
> for i = 1 to size
> bytes(i) = bytes(i) or &h80
> next
> put #out_handle, , bytes(1), size
> wend
> close '\ Caution. Closes all open files.
> end sub
>
> dim t as double
> t = timer
> scramble "words"
> print timer - t
>
>
>
>
> ____________________________________________________________________________________
> Be a better Globetrotter. Get better travel answers from someone who knows. Yahoo! Answers - Check it out.
> http://answers.yahoo.com/dir/?link=list&sid=396545469
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
--
regards,
bill
More information about the Programming
mailing list