It's good to hear that jfiles has fans and users. I second Henry's remarks jfiles is simple and works very well. It should live on in j7's.
Another utility that should live on is the humble scripts verb. I keep typing scripts in j7.01 only to get the value error blues. Cheers 2010/11/29 Björn Helgason <[email protected]> > This is a BIG issue and a very important one. > > The forms question alone is HUGE. > > 2010/11/29 Henry Rich <[email protected]> > > > What?? What good reason is there to retire something simple that works? > > I use jfiles all over. > > > > Is there a doc somewhere that discusses migration from J6 to J7? I rely > > on wd, forms, grid, jfiles, sockets, winAPI. > > > > Henry Rich > > > > On 11/28/2010 7:40 PM, John Baker wrote: > > > With the recent J 7.01 betas there have been rumbles that jfiles will > be > > > retired in the not to distant future. There are many good reasons for > > this > > > so I started exploring jfiles alternatives and I think that sqlite may > be > > > viable. > > > > > > Here's the good news: > > > > > > 1) sqlite is very stable, fast and produces binary compatible databases > > > across all the OSs jsoftware supports. You can copy a sqlite database > > from > > > a mac to linux or windows machine and access it without a single tweak. > > > sqlite is even available on android and the iphone and is embedded in > > major > > > software products like Adobe Lightroom. > > > > > > 2) data stored in sqlite format can be easily manipulated outside of J. > > A > > > huge plus for many. > > > > > > 3) The relaxed implied typing in sqlite, (it ignores limits on literals > > and > > > binary types), is well suited to J. > > > > > > 4) It's small and meant to be embedded. > > > > > > With so much going for it I spent sometime this weekend hacking around > in > > > J/C# . > > > > > > The following C# test program uses the ADO.NET sqlite provider at: > > > http://sqlite.phxsoftware.com/ > > > > > > Oleg's J sqlite addon: > > http://www.jsoftware.com/jwiki/Addons/data/sqlite > > > > > > and a C#/J com interface I put together see: > > > http://bakerjd99.wordpress.com/2010/05/28/a-c-net-class-for-calling-j/ > > > > > > It looks like you can easily stuff and fetch J binary data from all > these > > > environments without a big fuss: > > > > > > using System; > > > using System.Collections.Generic; > > > using System.IO; > > > using System.Text; > > > using System.Data; > > > using System.Data.Common; > > > using JServerClass; > > > using LescasseConsulting.AplServer; > > > using System.Data.SQLite; > > > > > > namespace SqliteTest00 > > > { > > > class Program > > > { > > > > > > // test sqlite database > > > private const string testdb = @"c:\temp\test.sqlite"; > > > > > > // test apl workspace > > > private const string apltestws = @"C:\pd\apl\aplwin\utf8"; > > > > > > private static JServer StartJServer(JServer.JScriptType st, > > string > > > inputscript) > > > { > > > // start a new J server and load root script > > > JServer js = new JServer(st, inputscript); > > > js.jShowServer = true; > > > return js; > > > } > > > > > > private static AplServer StartAPLServer(string ws) > > > { > > > AplServer apl = new AplServer(ws); > > > apl.Visible = 1; > > > return apl; > > > } > > > > > > static void Main(string[] args) > > > { > > > > > > // clear any old database > > > if (File.Exists(testdb)) File.Delete(testdb); > > > > > > // start J > > > JServer js = StartJServer(JServer.JScriptType.OnlyProfile, > > ""); > > > > > > // load up JOD databases - fetch words > > > js.jDo("require 'general/jod'"); > > > js.jDo("od ;:'play utils'"); > > > js.jDo("'rc wordtable'=: 0 10 get }.dnl''"); > > > > > > // split up wordtable for JServer casting interface > > > js.jDo("jwords=: 0 {" + '"' + "1 wordtable"); > > > js.jDo("jdefinitions=: 2 {" + '"' + "1 wordtable"); > > > js.jDo("jclasses=: ; 1 {" + '"' + "1 wordtable"); > > > > > > // set JOD nouns (stored as binaries) as byte strings > > > js.jDo("nmask=: 0 = jclasses"); > > > js.jDo("(nmask # 0 {" + '"' + "1 wordtable) =: nmask # 2 > {" > > + > > > '"' + "1 wordtable"); > > > > > > // load J sqlite interface - uses different dll than > > > // the one used by the C# library but so far I haven't > > > // seen any data compatibility issues. > > > js.jDo("load 'data/sqlite'"); > > > > > > // tell J where the test database is > > > js.jSet("testdb", testdb); > > > > > > // create J sqlite object for test database > > > js.jDo("]db=: testdb conew 'psqlite'"); > > > //js.jDo("blobsize__db 100000"); > > > > > > //// start APL and load test workspace > > > //AplServer apl = StartAPLServer(apltestws); > > > > > > // we use these three SQLite objects > > > SQLiteConnection sqlite_conn; > > > SQLiteCommand sqlite_cmd; > > > SQLiteDataReader sqlite_datareader; > > > > > > // create new database connection > > > sqlite_conn = new SQLiteConnection("Data Source=" + testdb > + > > > ";Version=3;New=True;Compress=True;"); > > > > > > // open connection > > > sqlite_conn.Open(); > > > > > > // create a new SQL command > > > sqlite_cmd = sqlite_conn.CreateCommand(); > > > > > > // create table > > > sqlite_cmd.CommandText = "CREATE TABLE test (word text > > primary > > > key, nameclass integer, definition text, nounvalue blob);"; > > > sqlite_cmd.ExecuteNonQuery(); > > > > > > string[] jwords; > > > js.jGet("jwords", out jwords); > > > > > > string[] jdefinitions; > > > js.jGet("jdefinitions", out jdefinitions); > > > > > > int[] jnameclasses; > > > js.jGet("jclasses", out jnameclasses); > > > > > > if ((jwords.Length != jdefinitions.Length) || > (jwords.Length > > != > > > jnameclasses.Length)) > > > { > > > // list lengths match coming out of JOD if they > > > // do not here the interface has punked my data > > > return; > > > } > > > > > > using (SQLiteTransaction mytransaction = > > > sqlite_conn.BeginTransaction()) > > > { > > > using (SQLiteCommand mycommand = new > > > SQLiteCommand(sqlite_conn)) > > > { > > > SQLiteParameter myparam1 = new SQLiteParameter(); > > > SQLiteParameter myparam2 = new SQLiteParameter(); > > > SQLiteParameter myparam3 = new SQLiteParameter(); > > > SQLiteParameter myparam4 = new > > > SQLiteParameter(DbType.Binary); > > > > > > mycommand.CommandText = "INSERT INTO test (word, > > > nameclass, definition, nounvalue) VALUES(?,?,?,?)"; > > > mycommand.Parameters.Add(myparam1); > > > mycommand.Parameters.Add(myparam2); > > > mycommand.Parameters.Add(myparam3); > > > mycommand.Parameters.Add(myparam4); > > > > > > for (int i = 0; i< jwords.Length; i++) > > > { > > > string wname = jwords[i]; > > > int wclass = jnameclasses[i]; > > > > > > myparam1.Value = wname; > > > myparam2.Value = wclass; > > > > > > // JOD stores nouns as binaries all other > words > > are > > > text > > > if (0< wclass) > > > myparam3.Value = (string)jdefinitions[i]; > > > else > > > { > > > // fetch JOD binary > > > byte[] nounvalue; > > > js.jGet(wname, out nounvalue); > > > myparam4.Value = nounvalue; > > > } > > > > > > mycommand.ExecuteNonQuery(); > > > } > > > } > > > mytransaction.Commit(); > > > } > > > > > > // close C# sqlite connection > > > sqlite_conn.Close(); > > > > > > // fetch words name from sqlite table and compare with > > originals > > > js.jDo("sqlwords=: strtbl__db 'select word from test'"); > > > js.jDo("jwords -: , }. sqlwords"); > > > > > > // fetch all noun binaries and compare with orginals > > > js.jDo("sbinaries=: }. strquery__db 'select word,nounvalue > > from > > > test where nameclass=0'"); > > > js.jDo("sbinaries -: (0 {" + '"' + "1 sbinaries) ,. " + > '"' > > + > > > ".&.> 0 {" + '"' + "1 sbinaries"); > > > > > > // fetch all literals and compare with orginals > > > js.jDo("sliterals=: }. strquery__db 'select > word,definition > > from > > > test where nameclass>0'"); > > > js.jDo("sliterals -: (-.nmask) # 0 2 {" + '"' +"1 > > wordtable"); > > > > > > //// apl does not automatically shutdown > > > //apl.CloseAPL(); > > > } > > > > > > } > > > > > > } > > > > > > > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > > -- > Björn Helgason, Verkfræðingur > Fornustekkum II > 781 Hornafirði, > t-póst: [email protected] > gsm: +3546985532 > sími: +3544781286 > http://groups.google.com/group/J-Programming > > > Tæknikunnátta höndlar hið flókna, sköpunargáfa er meistari einfaldleikans > > góður kennari getur stigið á tær án þess að glansinn fari af skónum > /|_ .-----------------------------------. > ,' .\ / | Með léttri lund verður | > ,--' _,' | Dagurinn í dag | > / / | Enn betri en gærdagurinn | > ( -. | `-----------------------------------' > | ) | (\_ _/) > (`-. '--.) (='.'=) ♖♘♗♕♔♙ > `. )----' (")_(") ☃☠ > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > -- John D. Baker [email protected] ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
