'testfile.txt' fwrite~3!:1 'Hello World!';(i.3 4);<2 1$'Text Here';1 2 3 4
456 3!:2 fread 'testfile.txt' ┌────────────┬─────────┬───────────┐ │Hello World!│0 1 2 3│┌─────────┐│ │ │4 5 6 7││Text Here││ │ │8 9 10 11│├─────────┤│ │ │ ││1 2 3 4 ││ │ │ │└─────────┘│ └────────────┴─────────┴───────────┘ On Thu, Feb 2, 2023 at 2:19 PM Ak O <akin...@gmail.com> wrote: > In this case the data is an array of boxes. > The datatype is 'boxe'd. > The data is of some shape. > > These things have to be preserved in order to correctly restore them > later. (at some cost, up-front to specify them, afterwards to recall the > specifics, or something else) It might be easy to write as literal, but > reverting back can present some challenges. > > For example: > ary=: 'abcd';4 5 6 7; 2 2 $ 8.9 7.6 .6.5 5.4 > > datatype ary > boxed > > datatype ":ary > literal > ***Danger*** > $ary NB. An array of structures that preserves operational > intention. > 3 > $":ary NB. An array whose structure is different than its > operational intention. > 4 22 > > These are different and need to be accounted for. > > datatype (>0{ary) > literal > > datatype (>1{ary) > Integer > > datatype (>2{ary) > floating > > > Each unit has a shape and a type to preserve. > > If I want to operate on this object with the meaning intended for it when > it was created, many errors can be avoided when unnecessary intermediate > conversions are avoided. > > Jmf allows you to operate directly without having the need to > revert from literal to your operation/operand, datatype (with the > associated overhead and tracking).I am not saying that there is no overhead > with jmf, just that the cognitive load is offset or preset because jmf > treats it for the user. > > > (1!2 & 1!:/, fwrite , fread) forms. > 1. Convert to literal. > 2. Write literal to file. > 3. Read literal from file. > 4. Convert literal type to operation type > 5. Operate with type. > End > ___ > > jmf form. > 1. Create jmf file. > 2. Map jmf file. > 3. Operate with file. > End > > > I am interested in understanding better how the best performance is > achieved comparing these forms. > > Thoughts. > > > Ak > > > > > > > > > > > > > > > > On Thu., Feb. 2, 2023, 07:51 bill lam, <bbill....@gmail.com> wrote: > > > Using Jmf is overkill. Also what are the advantages of jmf over 3!:1/3!:2 > > in this case? > > > > On Thu, 2 Feb 2023 at 7:17 PM Ak O <akin...@gmail.com> wrote: > > > > > load 'jmf' > > > NB. Loads jmf facilities. > > > > > > testfile =: {2,\?50#75 > > > > > > fn =: jpath 'C:\Users\skip\J904-user\temp\foo\testfile_name.jmf' > > > NB. Links a covername to the file path. > > > createjmf_jmf_ fn;(([:(*&8)#);testfile) > > > NB. Create the container for your file. > > > NB. -fn is your reference name > > > NB. -(([:(*&8)#);testfile) allocates the size of yor fike in bytes > > > > > > map_jmf_ 'testfile_disk';fn > > > NB. Maps the file to a noun 'testfile_disk' > > > ] testfile_disk_jmf_ =: testfile > > > > > > unmap_jmf 'testfile_disk_jmf_' > > > NB. Release mappings > > > Or > > > Exit 0 > > > Close session. > > > > > > > > > New session. > > > > > > load 'jmf' > > > fn =: jpath 'C:\Users\skip\J904-user\temp\foo\testfile_name.jmf' > > > map_jmf_ 'testfile1';fn > > > NB. Map file > > > ] testfile1_jmf_ > > > NB. File loaded as noun 'testfile1_jmf_' > > > > > > Some potential benefits of the .jmf datatype: > > > -Preserves header and shape information. > > > -If you want to map you file as read only, use the following syntax > > > map_jmf_ 'testfile1';fn;'';1 > > > -If you would like it to be copy-on-write use the following syntax > > > map_jmf_ 'testfile1';fn;'';2 > > > > > > > > > Ak > > > > > > On Wed., Feb. 1, 2023, 21:48 'Skip Cave' via Programming, < > > > programm...@jsoftware.com> wrote: > > > > > > > I have a boxed noun: > > > > > > > > ] testfile =: {2,\?15#50 > > > > > > > > > > > > > > > > > > ┌────┬─────┬─────┬─────┬─────┬─────┬────┬────┬────┬────┬─────┬────┬───┬────┐ > > > > > > > > │9 21│21 47│47 37│37 13│13 33│33 20│20 4│4 49│49 6│6 25│25 33│33 9│9 > > 6│6 > > > > 43│ > > > > > > > > > > > > > > > > > > └────┴─────┴─────┴─────┴─────┴─────┴────┴────┴────┴────┴─────┴────┴───┴────┘ > > > > > > > > > > > > I want to store it in the following location on my machine: > > > > > > > > > > > > ]fn =. < 'C:\Users\skip\J904-user\temp' > > > > > > > > ┌────────────────────────────┐ > > > > > > > > │C:\Users\skip\J904-user\temp│ > > > > > > > > └────────────────────────────┘ > > > > > > > > Then I will close that J session. > > > > > > > > > > > > Later, I will start a new J session, and I want to read that saved > file > > > > into a noun called 'test1' > > > > > > > > > > > > What is the J code for writing the noun into a file in the first > > session? > > > > > > > > What is the J code to read the file into a noun in the second > session? > > > > > > > > Should I use 1!2 & 1!:1, or fwrite & fread, or something else? > > > > > > > > > > > > Where in the J doc are these file operations and their tradeoffs > > > described? > > > > > > > > > > > > Skip > > > > > > > > > > > > Skip Cave > > > > Cave Consulting LLC > > > > > ---------------------------------------------------------------------- > > > > 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