1(0,+/\}.20 10 12)}42$0 NB. mask for length 10 12 20 1(0,+/\}:20 10 12)}42$0 NB. Drop last, not first; for 20 10 12
Le 2017-11-17 à 00:24, Daniel Lyons a écrit : > Thanks Rob! > > I did feel that the general idea of the rolling sum generating the indices of > the frets was not terrible, it just seemed like I was doing too much work to > get there. > > I have noticed that almost every time I ask for something, it's right there > in the core documentation! > >> On Nov 16, 2017, at 10:20 PM, Rob Hodgkinson <[email protected]> wrote: >> >> I meant to add … which is very close to what you derived. >> >> The key is the generation of the fret, another way here, but the group may >> suggest better phrases; >> 1(0,+/\}.20 10 12)}42$0 >> 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> 0 0 0 0 >> >> …/Regards Rob >> >>> On 17 Nov 2017, at 4:03 pm, Rob Hodgkinson <[email protected]> wrote: >>> >>> Hi Daniel, there is a primer article on cut (using cut2) which may help you; >>> http://www.jsoftware.com/help/primer/cut.htm >>> >>> The last example shows fixed width cuts using a boolean mask, so your same >>> example could be generated as so; >>> >>> NB. This generates the fret as a boolean list >>> (i.42) e. +/\0,20 10 12 >>> 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 >>> 0 0 0 0 >>> >>> NB. Now apply the fret to the data using the ‘cut’ conjunction and argument >>> is < (enclose) >>> ((i.42) e. +/\0,20 10 12) <;.1 'John Smith WA 418-Y11-4111’ >>> ┌────────────────────┬──────────┬────────────┐ >>> │John Smith │WA │418-Y11-4111│ >>> └────────────────────┴──────────┴────────────┘ >>> >>> NB. Now use rank “1 to apply the function on vectors of the table argument >>> (as in your example) >>> ((i.42) e. +/\0,20 10 12) <;.1"(1) 1 42$'John Smith WA 418-Y11-4111’ >>> NB. >>> ┌────────────────────┬──────────┬────────────┐ >>> │John Smith │WA │418-Y11-4111│ >>> └────────────────────┴──────────┴────────────┘ >>> >>> Hope this helps, Regards Rob >>> >>> >>>> On 17 Nov 2017, at 3:36 pm, Daniel Lyons <[email protected]> wrote: >>>> >>>> My problem is essentially to give an input file and the column widths and >>>> get it split up properly. I asked about it on the code review stack >>>> exchange site, but there doesn't seem to be much traffic there, so I >>>> figured maybe I could get a few eyes without annoying too many people >>>> reposting here. >>>> >>>> https://codereview.stackexchange.com/questions/180633/parsing-fixed-width-format-with-j >>>> >>>> <https://codereview.stackexchange.com/questions/180633/parsing-fixed-width-format-with-j> >>>> >>>> The solution I hacked up is this: >>>> >>>> parseFW =: dyad def '(+/ (0,+/\x) ="(0 1) i. (+/x)) <;.1 y'"(_ _1) >>>> >>>> Usage then looks like this: >>>> >>>> (20 10 12) parseFW 1 42 $ 'John Smith WA 418-Y11-4111' >>>> >>>> I find this works, at least for the simple cases I have thrown at it so >>>> far, but I can't help but feel there's too much happening here for >>>> something fairly simple. I know where the frets are the rest is just >>>> encoding them. In particular it felt like the inverse of I. should be >>>> helpful but I didn't get that working. >>>> >>>> If there's a library that does this, I'd probably rather use that, but I >>>> didn't see one at first blush. >>>> >>>> Input greatly appreciated! Thanks, >>>> >>>> -- >>>> Daniel Lyons >>>> >>>> >>>> >>>> >>>> ---------------------------------------------------------------------- >>>> 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
