On Oct 30, 2011, at 06:41, Nigel Garvey wrote: This takes about 0.02 seconds:
repeat with i from 1 to (count theNameList) set theItem to myname of item i of my theNameList -- NB. 'theNameList' is referenced (with 'my'). set end of my theChooseList to theItem -- Ditto 'theChooseList'. end repeat ______________________________________________________________________
Hey Nigel,
My, my. That's a whopper of a difference.
0.008 seconds here on my i7 MacBook Pro
Outstanding little trick - any idea of why it works?
For contrast:
Using Axel's original data sample of 2016 records, changing it to pure text and then doing the lookup with the Satimage.osax's 'find text' command with regular expressions.
set lookupTable to " myname:Titzi height:170 weight:55 myname:Stephen height:184.5 weight:75 myname:Elke height:174.5 weight:50 ... "
fndUsing("myname:([^\\t]+)", "\\1", lookupTable, false, true, false, true, true) ## My Handler
0.0141 seconds
Tabs are changed to spaces for readability in Mail.
Shelling out to Perl instead:
set cmd to "perl -wlne 'if (m/^myname:([^\\t]+)/) {print \"$1\"}' <<< " & quoted form of lookupTable set AppleScript's text item delimiters to return set chooseFrom to text items of (do shell script cmd)
0.0348 seconds
And just for giggles let's try out plain old sed:
set f to alias "Thor:Users:chris:test_directory:junksio.txt" set lookupTable to quoted form of (read f) set cmd to "sed -nE 's/^myname:([^ ]+).+/\\1/p' <<< " & lookupTable set AppleScript's text item delimiters to return set chooseList to text items of (do shell script cmd)
0.0674 seconds
I've done these kinds of lookups since 1996 or so when I discovered the first regex osax, and I prefer that method for speed, flexibility, and ease of maintenance.
I often keep longer lists as separate text files for convenient editing/sorting with BBEdit and read them into the script at runtime.
Using the original Satimage.osax script but reading input from a file:
0.0147 seconds
Given this kind of fixed record structure there's no need for field labels, although I will often put in a label header for readability:
set lookupTable to " FNAME LNAME HEIGHT WEIGHT -------------------------------------------------- Travis Mcgee 193 95 "
Again tabs are changed to spaces for readability in Mail.
One more thing. Let me recommend the LapTime.osax for timing scripts - or the 'chrono' function in Smile. (These are free.)
And of course Script Debugger has its own timing mechanism (but it's not free).
-- Chris
|