Hypothetically speaking, if you want your code to be readable, and if you
wish to also be entering the names literally (as opposed to being data
driven), I imagine that you should not be using names which need to be
modified before they can be used. And in that case you shouldn't need a
cover verb for the assignment?

Or have I misunderstood what you are trying to do?

Thanks,

-- 
Raul


On Mon, May 26, 2014 at 7:08 AM, Ric Sherlock <[email protected]> wrote:

> Here is my solution based on the discussion. I don't think that I'd want to
> prefix the header names normally. For me a lot of the benefit of assigning
> the columns to the header is that my code becomes more readable. This get
> spoilt a bit when all the names have prefixes. However assign2hdr takes an
> optional left arg of the header names, so if you wanted to add a prefix
> then that is possible at that point.
> The solution below doesn't yet handle the problem with header names
> colliding with local names that spawned this thread.
>
> forceLeadingAlpha=: ,~ 'X' {.~ [: -.@e.&Alpha_j_ {.
> replaceNonAlpha=: (-.@e.&AlphaNum_j_)`(,:&'_')}
> deus=: #~ (+. (1: |. (> </\)))@('_'&~:)    NB. delete extraneous
> underscores
> coerce2Name=: deus@replaceNonAlpha@forceLeadingAlpha@deb
>
> assign2hdr=: 3 : 0
>
>   'hdr dat'=. split y
>
>    hdr assign2hdr dat
>
> :
>
>    hdr=. uniqify_pdsv_ coerce2Name_pdsv_&.> x
>
>    dat=. |: makenumcol y
>
>    idx=. I. 2 ~: (3!:0)&> {."1 dat
>
>    ((<<<idx){hdr)=: <"1 (<<<idx) { dat
>
>    (idx{hdr)=: idx { dat
>
>   EMPTY
>
> )
>
>
> On Mon, May 26, 2014 at 8:55 PM, Raul Miller <[email protected]>
> wrote:
>
> > That sounds like a good idea.
> >
> > Except I think we need three parameters:
> > list of names
> > disambiguating prefix
> > list of values
> >
> > I think I'd like the list of names be x, the prefix be adverb argument
> and
> > the list of values be y.
> >
> > So here's an implementation:
> > masgn=:1 :0
> > :
> >   bad=.a.-.;'0Aa' ([ (+ i.) 1 + -~)&.(a.&i.)&.> '9Zz'
> >   names=. ('_' I.@e.&bad@]} m&,)&.>x
> >   (names [erase 'names bad x y')=: y
> > )
> >
> > Example use:
> >
> >    (;:'a 1.1 b') 'z' masgn i.3 3
> > 0 1 2
> > 3 4 5
> > 6 7 8
> >    za
> > 0 1 2
> >    z1_1
> > 3 4 5
> >    zb
> > 6 7 8
> >
> > Of course I probably went a little overboard here with the
> implementation.
> > So feel free to strip out parts you don't need. And maybe add a 0 0$ at
> the
> > beginning of the result line, if you do not like results.
> >
> > Thanks,
> >
> > --
> > Raul
> >
> >
> >
> > On Mon, May 26, 2014 at 4:39 AM, 'Pascal Jasmin' via Programming <
> > [email protected]> wrote:
> >
> > > The way I would do it would be to add a prefix passed from x parameter,
> > > and replace spaces (or illegal characters ') with underscores.
>  Assuming
> > > other illegal characters are rare should be fine, but the advantage of
> > > prefixing all columns helps both in preventing collisions with general
> J
> > > names, and allows processing multiple such files without collision.
> > >
> > >
> > > ----- Original Message -----
> > > From: Ric Sherlock <[email protected]>
> > > To: Programming JForum <[email protected]>
> > > Cc:
> > > Sent: Sunday, May 25, 2014 4:20:16 PM
> > > Subject: Re: [Jprogramming] Multiple assignments
> > >
> > > I recently released an update to addons/dsv that contains a new
> utitlity:
> > > assign2hdr
> > >
> > > testcsv=: noun define
> > > # The following is an example of a comma-separated file with
> > > # comment lines at the start of the file indicated by the fact they
> > >
> > > # start with the # symbol.
> > >
> > > id,bar code,name
> > >
> > > 24582621,119533,DELTOP DAVINCI
> > >
> > > 25422991,155439,AMBZED ROSCOE S2F
> > >
> > > 25784612,135624,TEF SHADOW BLARIS
> > >
> > > 22063188,102545,BIG P BLONDEL PRIM
> > >
> > > 20803506,137609,MONGA FLOL
> > >
> > > 27360900,107865,FRAMBIN R NOGN ET
> > >
> > > )
> > >
> > >
> > >    fixcsv testcsv
> > >
> > > +--------+--------+------------------+
> > >
> > > |id |bar code|name |
> > >
> > > +--------+--------+------------------+
> > >
> > > |24582621|119533 |DELTOP DAVINCI |
> > >
> > > +--------+--------+------------------+
> > >
> > > |25422991|155439 |AMBZED ROSCOE S2F |
> > >
> > > +--------+--------+------------------+
> > >
> > > |25784612|135624 |TEF SHADOW BLARIS |
> > >
> > > +--------+--------+------------------+
> > >
> > > |22063188|102545 |BIG P BLONDEL PRIM|
> > >
> > > +--------+--------+------------------+
> > >
> > > |20803506|137609 |MONGA FLOL |
> > >
> > > +--------+--------+------------------+
> > >
> > > |27360900|107865 |FRAMBIN R NOGN ET |
> > >
> > > +--------+--------+------------------+
> > >
> > >
> > >    assign2hdr fixcsv testcsv
> > >
> > >    bar_code
> > >
> > > 119533 155439 135624 102545 137609 107865
> > >
> > >
> > > It does try to automatically coerce names, but does so by removing
> > leading
> > > blanks and any leading chars that aren't valid starting chars for a
> name.
> > > Adding as 'X' in front may be better than that.
> > >
> > > On May 26, 2014 5:04 AM, "Devon McCormick" <[email protected]> wrote:
> > >
> > > > Assigning column names this way can be very useful.  However, it
> > requires
> > > > that column names be valid J variable names.  The R programming
> > language
> > > > has a feature like this that includes automatic coercion of invalid
> > names
> > > > for at least a couple of simple cases - something like changing
> > embedded
> > > > spaces to underscores and prefixing any name beginning with a numeral
> > > with
> > > > "X".
> > > >
> > > > It might be useful to publicize a simple set of conversions like this
> > > for J
> > > > names on the wiki so that there's at least a stab at standardization.
> > > >
> > > >
> > > > On Sun, May 25, 2014 at 12:58 PM, J. Patrick Harrington
> > > > <[email protected]>wrote:
> > > >
> > > > > I've always liked this economy of assignment:
> > > > > 'e f g'=. s=. >1 2;3 4;5 6
> > > > >   f
> > > > > 3 4
> > > > >   e
> > > > > 1 2
> > > > > -- but I wondered if it were possible to extend this where the left
> > > hand
> > > > > side is not explicit:
> > > > >    abc=. 'a';'bb';'ccc'
> > > > > ┌─┬──┬───┐
> > > > > │a│bb│ccc│
> > > > > └─┴──┴───┘
> > > > > I found I could make a single assignment:
> > > > >    (>1{abc)=. 1{s
> > > > >    bb
> > > > > 3 4
> > > > >   a
> > > > > |value error: a
> > > > > But I didn't want to put this into a loop.
> > > > > It was neat to find that I could write:
> > > > >    (abc)=. s
> > > > >    a
> > > > > 1 2
> > > > >    bb
> > > > > 3 4
> > > > >   ccc
> > > > > 4 5
> > > > >   abc
> > > > > ┌─┬──┬───┐
> > > > > │a│bb│ccc│
> > > > > └─┴──┴───┘
> > > > >   This is useful in working with data files output
> > > > > by a stellar evolution program where I have ASCII tables with 90
> > > columns
> > > > > and over 1000 rows, and each
> > > > > column has a name 1 to 25 characters long: I wanted
> > > > > to read this into a J session, assigning the column
> > > > > values to each of the respective names. Turns out it
> > > > > can be done with one line of the form
> > > > >    (head)=: data_array
> > > > > where
> > > > >    head
> > > > > ┌────┬────┬──────┬────┬────┬──────────┬────────┬────────────
> > > > > ─────────────┬───────────────────┬─
> > > > > │zone│logT│logRho│logP│logR│luminosity│eps_grav│log_abs_
> > > > > eps_grav_dm_div_L│signed_log_eps_grav│..
> > > > > └────┴────┴──────┴────┴────┴──────────┴────────┴────────────
> > > > > ─────────────┴───────────────────┴─
> > > > > (see http://www.astro.umd.edu/~jph/mesa_read.ijs) Another example
> of
> > > the
> > > > > "black hole of J".
> > > > >
> > > > > I don't know where in the documentation this can be
> > > > > found - I just got there by experimentation.
> > > > >
> > > > >                                        Patrick
> > > > >
> > > > > P.S. This started as a post asking for
> > > > >      help in getting rid of a loop, but
> > > > >      I found the solution along the way.
> > > > >
> > ----------------------------------------------------------------------
> > > > > For information about J forums see
> > http://www.jsoftware.com/forums.htm
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Devon McCormick, CFA
> > >
> > >
> > >
> > > >
> ----------------------------------------------------------------------
> > > > For information about J forums see
> http://www.jsoftware.com/forums.htm
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> > >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to