http://www.jsoftware.com/pipermail/programming/2011-January/021609.html
In the thread mentioned above I was trying to extract information corresponding to the following key tags from a file excerpted from there: date, duration, gameNumber, moves, and result. Each "dict" group represents a game of Freecell. I was able to do it with help from the forum, but it being such a simple database, I wonder if you would show how to do it with your 2 blog codes? Understand please that I may be asking much more than you can provide, do feel free to decline. Below is some code that I used on the data file. The code was only intended for my own use, but maybe a cursory look could clarify what I did. At the very bottom is a "demo" list of things I did with the dataset. I hope there is enough meat and not too much fat for you to see what I was doing. NB. freecellscore.ijs NB. 1/25/11 NB. 10/3/13 revision require 'xml/sax format/datefmt types/datetime' saxclass 'pfreecell' noba=: -.&' ' startDocument=: 3 : 0 S=: '' Z=: i.0 2 ) endDocument=: 3 : 'Z' startElement=: 4 : 0 S=: S,<y ) endElement=: 3 : 0 S=: }:S ) characters=: 3 : 0 s2=. _2{.S if. s2 -: ;:'dict key' do. Z=:Z,y elseif. (1<#y) *. #noba y do. Z=:Z, y end. ) coclass'base' NB. td means time-date tdmask=: 1 1,,6($,:)1 1j1 0 tdfromiso=: tdmask&(#!.' ') tfromiso=: (]- 0 0 0,~1800 1 1-~3&{.)&(".@tdfromiso) tdfmt=: ":!.13 td=: tdfmt@tsrep@(".@tdfromiso) ti=: tdfmt@tsrep@tfromiso arrayed=: _5&(;/\) amend0=: 0&((".@tdfromiso each @{)`(,@[)`]}"0 1) amend1=: 1&((tfromiso each @{)`(,@[)`]}"0 1) clean=: }:@}.@('<' dropto&.|. '>' dropto ]) NB. create verbs for processing 5 input types ti=: td=: ] date=: td duration=: ti gameNumber=: moves=: result=: ] Date=: tdfromiso@(0&pick"1) Duration=: tfromiso@(1&pick"1) Duration=: 24 60 60&#.@(_3&{.)@tfromiso@(1&pick"1) GameNumber=: 2&pick"1 Moves=: ".@(3&pick"1) Result=: 4&pick"1 NB. execute verb,noun data pairs ex=: (],~'~',~[)&('''',],''''"_)&dtb/ freqcount=: (\: {:"1)@(~. ,. #/.~) midpt=: -:@<:@# median=: -:@(+/)@((<. , >.)@midpt { /:~) mean=:+/ % # Note 'demo' load'plot' load 'files' NB. next line wraps #indata=: fread '/Users/brian/Library/Preferences/org.wasters.Freecell.history.plist' indata=: '</dict>' dropto&.|. '<dict' dropto indata NB. next line wraps data=: }. _12 clean each@((0 0 1 0 1 0 1 0 1 0 1 0&#))\<;._2 indata,LF NB. get data only #u=. /:Date data NB. sort order sdata=: u{data NB. next line wraps between=: 100000,~0 0 30 24 60 60 #.2 tsDiff/\&.|.". Date sdata NB. seconds between Dates threshold=: */2 60 60 NB. 2 hours outliers=: 3600>Duration sdata NB. really, games of less than 1 hour freqcount #&>(between<:threshold)<;. 1 sdata NB. # games played per session? NB. next line wraps plot (#~0 1 $~ #)median @:Duration&>(outliers#between<:threshold)<;. 1 outliers#sdata outliers=: 1000>Duration sdata NB. really, games of less than 1000 secs 'dot' plot (Duration;~Moves)outliers#sdata ) -- (B=) ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm