I can test on linux jconsole, please send the script and csv file to my
email.

On Sat, Sep 14, 2019, 2:30 PM Joey K Tuttle <[email protected]> wrote:

> I was hacking together a little script a few days ago whose purpose was to
> take a downloaded data.csv file and change fields around a bit and then
> emit a tab delimited result suitable for pasting into a spreadsheet.
>
> When doing things like this, I always work from a command line jconsole
> interface in either OSX or Linux. I got my logic sorted out and producing
> the result I wanted and then added the bits to my script to accept stdin
> which is also my custom for creating command line scripts. What surprised
> me was that when I gave the file name and did a "readcsv" for it, things
> were good, but when I  passed the data through a pipe to the jscript I got
> a segmentation fault...
>
> I was working in j901 Beta-i in Mac OSX when I first encountered this
> problem. I verified that the same problem occurred in Linux. I don't have
> access to windows (or any work experience with command line interface
> there...)
>
> I first thought it might be a Beta problem, but then noted that switching
> Jengines to j807 did not clear the problem. Switching to j806 did cause the
> problem to go away and gave me the expected results. In j901 both AVX and
> nonAVX engines have the problem
>
> I've spent several hours chasing this and trying to reduce the places to
> look and this evening feel like I finally made some progress. Here is a
> simplified version of the script in question -
>
> iMi7:jseg jkt$ cat bfun     # a jscript
> #! /usr/local/bin/ja
> 3 : 0 ARGV
>  try. NB. catch errors.
>  echo JVERSION
>  require 'csv'
>   'call parms stin' =: getargs 'no fancy parms...' NB. parms e.g. -a10 <->
> (,'a');'10'
>    if. ((0 = #stin) *. 3 > # call) do.
>     stderr 'Usage: ',(;1{call), ' argument list',NL
>     exit 2
>     tmp=: 1 2 3
>    else.
>      if. ( *#stin ) do.
>        dat=: (',';'"') fixdsv CR-.~ > stin
>        (3!:1 dat) fwrite 'bfstin'
>      else.
>        (3!:1 dat=. readcsv >2{y) fwrite 'bffin'
>      end.
>     tmp=: |. dat,. a:
>     echo $tmp
>    end.
>  catch.
>   stderr 13!:12 ''  NB. at the very least...
>  end.
> exit 0
> )
>
> I could eliminate the error catching, but this is a template that I use
> over and over again so I left that in. Here is a result of running that
> script -
>
> iMi7:jseg jkt$ ./bfun t2.csv
> Engine: j807/j64nonavx/darwin
> Release-d: commercial/2019-03-18T16:08:19
> Library: 8.07.26
> Platform: Darwin 64
> Installer: J807 install
> InstallPath: /applications/j64-807
> Contact: www.jsoftware.com
> 16 6
>
> # that is the expected result, a 16 6 boxed table
>
> iMi7:jseg jkt$ cat t2.csv | ./bfun
> Engine: j807/j64nonavx/darwin
> Release-d: commercial/2019-03-18T16:08:19
> Library: 8.07.26
> Platform: Darwin 64
> Installer: J807 install
> InstallPath: /applications/j64-807
> Contact: www.jsoftware.com
> Segmentation fault: 11
>
> The file "t2.csv" is a relatively small (972 bytes) text file containing
> nothing unusual.
>
> Here is where it gets even stranger, if I make the t2.csv file 16 bytes
> shorter by removing characters from a text field, (or, as I originally
> discovered, removing the CR chapters from the 16 line DOS file) then the
> output from my test script (bfun) is what I would expect and the binary
> files written by (3!:1 dat) fwrite are identical.
>
> If, instead of 16, I remove 10 characters from t2.csv then I get the
> following result which may be a clue (but I'm depending on someone with
> much more experience in the underlying code to comment, Henry, Roger,
> Bill??)
>
> iMi7:jseg jkt$ cat t2.csv | ./bfun
> Engine: j807/j64nonavx/darwin
> Release-d: commercial/2019-03-18T16:08:19
> Library: 8.07.26
> Platform: Darwin 64
> Installer: J807 install
> InstallPath: /applications/j64-807
> Contact: www.jsoftware.com
> ja(56541,0x7fffbb8843c0) malloc: *** error for object 0x101841e0a: pointer
> being freed was not allocated
> *** set a breakpoint in malloc_error_break to debug
> Abort trap: 6
> iMi7:jseg jkt$
>
> and, as I said this happens in j901 and j807 on Linux and Mac OSX (both
> AVX and nonAVX) so it is clearly a problem that should get some attention.
>
> The problem disappears if the   require 'csv' scripts are not involved,
> and that may be an additional hint for what is going sideways.
>
> Strangely (or so it seems to me) the problem also disappears if the line
>
>   tmp=: |. dat,. a:
>
> is removed from the script. So that seems to be the culprit line...
>
> If needed, I can supply the 972 byte file to help someone else reproduce
> the error. Let me know and I can send a zip file to a private address
> (since they are, appropriately, not allowed in the forum).
>
> - joey
>
>
>
>
>
> ----------------------------------------------------------------------
> 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