Oh hey that's awesome! I ended up crafting a SQL query to do it by querying the database, but of course, that may be a bit slower than filtering the datagrid itself with all the records in an array stored locally.
I will have to test both methods and see how it goes. I am really leaning towards finding in the datagrid though. Thanks for this. Bob On Aug 10, 2011, at 12:28 PM, zryip theSlug wrote: > Hi Bob, > > Maybe time for sharing some hidden scripts. > > Here is a part of the DGH engine script that could probably do the trick: > > command dgh_FindLine pWhichDataGrid, pKeyIndexA, pSearchType, pSearchString > local tTheIndexList, tIndex, tTheLineList > > _dgh_FindIndex pWhichDataGrid, pKeyIndexA, pSearchType, pSearchString > put the result into tTheIndexList > > repeat for each item tIndex in tTheIndexList > put the dgLineOfIndex[tIndex] of pWhichDataGrid into item (the > number of items of tTheLineList + 1) of tTheLineList > end repeat > > if (tTheLineList is empty) then > return 0 > else > return tTheLineList > end if > > end dgh_FindLine > > private command _dgh_FindIndex > pWhichDataGrid,pTpKeyIndexA,pSearchType,pSearchString > local foundAMatch, theFoundIndex, i, theIndex, tIndexValue, > tSearchType, tNotSearch, tSearchString, tError > > if (pSearchType is among the items of _zuSearchContentOperatorList()) then > try > put the dgData of pWhichDataGrid into sDataArray > > repeat for each key theIndex in sDataArray > repeat with i = 2 to the paramCount step 3 > put sDataArray[theIndex][param(i)] into tIndexValue > put param(i+1) into tSearchType > put param(i+2) into tSearchString > > if (first word of tSearchType is "not") then > put "not " into tNotSearch > delete first word of tSearchType > else > put empty into tNotSearch > end if > > put value(tNotSearch & "(" & quote & tIndexValue & > quote && tSearchType && quote & tSearchString & quote & ")") into > foundAMatch > > exit repeat > end repeat > > if foundAMatch then > put theIndex into item (number of items of > theFoundIndex + 1) of theFoundIndex > end if > end repeat > > if (theFoundIndex is empty) then > return 0 > else > return theFoundIndex > end if > > catch tError > answer tError > end try > > else > answer pSearchType && "is not in" && _zuSearchContentOperatorList()) > end if > > end _dgh_FindIndex > > private function _zuSearchContentOperatorList > return "is,begins with,ends with,contains,is not,not begins > with,not ends with,not contains,=,>,>=,<,<=,<>" > end _zuSearchContentOperatorList > > It is an implementation of the FindIndex and FindLine handler of the > Datagrid library with additional capabilities. The capacity of > searching with multiple queries is removed. I'm using another couple > of handlers for doing that. > Note that all the existing operators can be use: contains, begins > with, ends with, >, <, =, is, etc > > Usage examples: > > put the long id of grp "myDataGrid" into tDataGridRef > dgh_FindLine tDataGridRef, "Col1", "contains", "a" > put the result into tTheLineFound > set the dgHilitedLines of tDataGridRef to tTheLineFound > > On Wed, Aug 10, 2011 at 12:43 AM, Bob Sneidar <b...@twft.com> wrote: >> Hi all. >> >> I am hoping there will be a way to search a datagrid for PARTIAL matches. I >> already can find EXACT matches, and I tried regex on the findIndex command, >> to no avail. I know that if I cannot I can always get the dgText of the >> datagrid, but there is a problem with that method. First, the datagrid may >> contain a huge amount of data, and it seems inefficient to work with strings >> if I can use arrays instead. Second, if I need to set the dgText of the >> datagrid to what I find, it will wipe all my hidden data columns, that is >> array keys which I do not have a column for in the datagrid. I depend on >> these. >> >> So I can kludge a way to do this, but I was hoping I was simply missing >> something. > > > Best Regards, > -- > -Zryip TheSlug- wish you the best! 8) > http://www.aslugontheroad.co.cc > > _______________________________________________ > use-livecode mailing list > use-livecode@lists.runrev.com > Please visit this url to subscribe, unsubscribe and manage your subscription > preferences: > http://lists.runrev.com/mailman/listinfo/use-livecode _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode