Oleg wrote: > I am thinking to further generalize the approach and simplify > the interface, in the way pack/unpack work in Perl
> I was wondering if someone already done it or at least > thought of such interface. Rewriting pack/unpack has been on my todo list for years. I have thought about it many times. But the only code I have is several useless stubs. The way I thought about it is you'd have an adverb unpack which took a Perl-style unpack() template. The adverb, given the template, derives a monad. The monad, given a list of bytes (chars), derives a list of boxes. Each box contains a list of the values of its corresponding template phrase. So basically, the template defines a single message with multiple values. The verb cuts its stream into messages, and each message into values, converting them accordingly. Then its result is a list of boxes, each containing its corresponding values, one per message. On top of that, you could have a script which took such a list of boxes, derived a object, and assigned names to the contents of the boxes. I've also considered extending the idea to allow other kinds of templates. C structs for example. Or maybe XML descriptions of data, like BFD: http://collaboratory.emsl.pnl.gov/sam/bfd/ -Dan PS: Other links mentioning Perl's pack(): Raul: http://www.jsoftware.com/pipermail/general/2005-October/024741.html Me: http://www.jsoftware.com/pipermail/programming/2007-June/007143.html I also made a pack() request in Oct 2004, but it didn't make it into the archive. It is appended. > -----Original Message----- > From: Daniel Bron [mailto:[EMAIL PROTECTED] > Sent: Friday, October 29, 2004 11:46 AM > To: [EMAIL PROTECTED] > Subject: [Jforum] Utility similar to Perl's pack() > > Forum, > > Does anyone have a utility similar to Perl's pack()? To > quote from the Perl documentation: > > ------------------ > pack TEMPLATE,LIST > > Takes a LIST of values and converts it into a string using > the rules given by the TEMPLATE. The resulting string is the > concatenation of the converted values. Typically, each > converted value looks like its machine-level representation. > For example, on 32-bit machines a converted integer may be > represented by a sequence of 4 bytes. > > The TEMPLATE is a sequence of characters that give the order > and type of values, as follows: > ... > ------------------ > > For a fuller description, see > http://www.perldoc.com/perl5.8.4/pod/func/pack.html > > Basically, I want to stream binary data over a socket, and > the data is in a specific format, e.g. a int followed by an > unsigned short, two doubles, and a null-terminated (C) string. > > I'd like to give a template string and list of boxes > containing J-type values as input and get a string encoding > (as specified by the template) the J-values as output. > Either a dyad or an adverb would be acceptable. > > -Dan > > -------------------------------------------------------------- > ------------ > For information about the J Forum see > http://www.jsoftware.com/j_forum.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
