Raymond E. Griffith wrote:
The code fragment above does work - that's my working but inefficient/large version.Alex Tweedly wrote:
Nope, spoke too soon. That looks convincing, and worked on my initial testing - but doesn't actually work properly in all cases.
The problem is that the CRs are included within items - so given data like a,abc,1 b,def,2 c,qwe,3 etc., item 1 is "a", item 2 is "abc", item 3 is "1 b" (i.e. including the cr), item 4 is "def", etc.
Clearly, that means itemOffset will never match what I think of as items that are first (or last) on each line.
In the above case, I want to be able to search for the line containing item "b" and find the second line. Currently I'm using
function findItemAsLineNumber pItem, pData
local i, L
set wholeMatches to true
-- set the itemDel to TAB
put 0 into i
repeat for each line L in pData
add 1 to i
if itemOffset(pItem, L) > 0 then return i
end repeat
return 0
end findItemAsLineNumber
but I still think there should be an easier (or at least faster, shorter, better) way.
-- Alex.
Hmmm. Since L is a separate chunk each time (a single Line), I don't know
why it won't work.
What fails is the one-liner using get the number of lines in item 1 to itemOffset(tNeedle, tData) in tData
That fails because of the CR-within-item issue.
There is also a "filter" pData with pitem -- but you'd need to put pDataAs far as I can see, the filter expressions are not capable of identifying items within a line, they're just too far short of proper regex, so 'filter' can't be used. If there is a way to do it, please let me know.
into a temporary variable since it eliminates the rest of the data list
except for the line it finds. It also has the the ability to use simple
regex arguments in the filter.
Regex can do it easily enough, so there is the option of
I'm not sure if that is much easier or as readily understandable as the longer scripted version - but it's probably faster.put "[,^](" & pID & ")[,$]" into tRegex put matchChunk(pData, tRegex, t1, t2) into t if t then get the number of lines in char 1 to t2 of pData else get 0 end if
or Robert suggested the alternative of adding extra itemDelimiters at the start and end of each line in the data structure, which would be a confusing but feasible way to do it.
Thanks everyone - I now have a few ways to do it; I'll stick to the scripted version for maintainability, and if performance becomes an issue I'll benchmark the regex method and the additional delimiter version and see which wins.
Thanks -- Alex.
No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.300 / Virus Database: 265.7.3 - Release Date: 24/01/2005
_______________________________________________ use-revolution mailing list [email protected] http://lists.runrev.com/mailman/listinfo/use-revolution
