The prefixing idea would not preclude using an empty vector as the prefix,
assuming the column names are all valid J variable names.


On Tue, May 27, 2014 at 2:43 AM, Ric Sherlock <[email protected]> wrote:

> 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
>



-- 
Devon McCormick, CFA
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to