I think both of your points come back to the fact that you see there are
situations where prefixing the field names in the header would be useful
and I like your use of nl to group fields.

I agree these are sometimes desirable and my approach facilitates prefixing
if desired (as shown in previous post) but doesn't mandate it for all
fields. However for (my) most common usage, no prefixes is preferable.

Raul's validation is simpler but doesn't cover a couple of edge cases. For
example the name 'prot(bv)' would be forced to prot_bv_ . This would assign
fine but would now be located in the new locale bv.
'Name (first)' would be forced to Name__first_ which is an "ill-formed
name".

Cheers,


On Tue, May 27, 2014 at 12:26 AM, 'Pascal Jasmin' via Programming <
[email protected]> wrote:

> a couple of reasons to prefer Raul's approach, beside the simpler
> validation:
>
> 1.  you get to prefix the "fields" with the "table name"
>
>     (;:'a 1.1 b') 'col' masgn i.3 3
> 0 1 2
> 3 4 5
> 6 7 8
>
> 2.  You can use nl based code for group operations on the fields
>
>    'col' nl ''
> ┌──────┬────┬────┐
> │col1_1│cola│colb│
> └──────┴────┴────┘
>     (] ,. ". each ) 'col' nl ''
> ┌──────┬─────┐
> │col1_1│3 4 5│
> ├──────┼─────┤
> │cola  │0 1 2│
> ├──────┼─────┤
> │colb  │6 7 8│
> └──────┴─────┘
>
>
>
> ----- Original Message -----
> From: Ric Sherlock <[email protected]>
> To: Programming JForum <[email protected]>
> Cc:
> Sent: Monday, May 26, 2014 7:08:40 AM
> Subject: Re: [Jprogramming] Multiple assignments
>
> 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
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to