On Feb 16, 2015, at 9:05 PM, Dr. Hawkins wrote: > On Mon, Feb 16, 2015 at 3:08 PM, Alex Tweedly <a...@tweedly.net> wrote: > >> That's not quite correct. It doesn't do a single initial complete scan of >> the whole variable and keep all the pointers. What it does is (more like) >> keep track of how far it has currently processed, and then when it needs >> the next line, it scans from that remembered position forward until the >> next CR - and then remembers that as the current position. > > > And if you repeat for each item, and change the itemDel in the loop, you > had *better* remember to change it back before end repeat, or very strange > things happen . . .
No need to change the itemdel in a loop, you can use this instead: put getItem(pList, pIndex, pDelim) into tItem -- Peter Peter M. Brigham pmb...@gmail.com http://home.comcast.net/~pmbrig ----- function getItem pList, pIndex, pDelim -- returns item # pIndex of pList, given itemdelimiter = pDelim -- could just "get item pIndex of pList" in the calling handler but -- then have to set and restore the itemDelimiter, so this is less hassle -- defaults to pDelim = tab -- allows pDelim to be a string of characters -- so you could do this: -- getItem("a//b//c//d//e//f",4,"//") -> d -- also allows pIndex to be a range, eg "3-5" -- in that case enclose the range in quotes -- by Peter M. Brigham, pmb...@gmail.com — freeware -- requires getDelimiters() if pDelim = empty then put tab into pDelim put getDelimiters(pList) into tempDelim if tempDelim begins with "Error" then return "Error in getDelimiters()" replace pDelim with tempDelim in pList set the itemdelimiter to tempDelim put offset("-",pIndex) into dashPos if dashPos > 1 then -- don't catch if pIndex is something like -1, -2, etc put char 1 to dashPos-1 of pIndex into tStart put char dashPos+1 to -1 of pIndex into tEnd put item tStart to tEnd of pList into theItem replace tempDelim with pDelim in theItem else put item pIndex of pList into theItem end if return theItem end getItem function getDelimiters pText, nbr -- returns a cr-delimited list of <nbr> characters -- not found in the variable pText -- use for delimiters for, eg, parsing text files, loading arrays, etc. -- usage: put getDelimiters(pText,2) into tDelims -- if tDelims begins with "Error" then exit to top -- or whatever -- put line 1 of tDelims into lineDivider -- put line 2 of tDelims into itemDivider -- etc. -- by Peter M. Brigham, pmb...@gmail.com — freeware if pText = empty then return "Error: no text specified." if nbr = empty then put 1 into nbr -- default 1 delimiter put "2,3,4,5,6,7,8,16,17,18,19,20,21,22,23,24,25,26" into baseList -- low ASCII values, excluding CR, LF, tab, etc. put the number of items of baseList into maxNbr if nbr > maxNbr then return "Error: max" && maxNbr && "delimiters." repeat with tCount = 1 to nbr put true into failed repeat with i = 1 to the number of items of baseList put item i of baseList into testNbr put numtochar(testNbr) into testChar if testChar is not in pText then -- found one, store and get next delim put false into failed put testChar into line tCount of delimList exit repeat end if end repeat if failed then if tCount = 0 then return "Error: cannot get any delimiters." else if tCount = 1 then return "Error: can only get one delimiter." else return "Error: can only get" && tCount && "delimiters." end if end if delete item i of baseList end repeat return delimList end getDelimiters _______________________________________________ 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