On Mar 22, 2011, at 5:31 PM, Timothy Miller wrote:
Hiya,
I guess I never tried to write a script like this before. Thought it
would be simple... Well, it is simple, probably, just not simple in
a way that I actually understand.
How do I find multiple instances of a string in a given field of a
given card and record each foundchunk in a variable, and then stop
repeating the find command when the last instance is found?
I want to do this in the context of a repeat loop that goes to all
the cards in the stack in sequence.
Sooo, I also need to know... How do I tell the repeat loop to move
on to the next card:
- if no instance of the string is found on the card
- and
- after the last instance of the string is found on the card
Hope that's clear.
I understand I'll probably want to nest a repeat loop using the find
command on each card, with exits when certain conditions are met.
I'm choking on the details.
I don't need a complete and accurate script. Just the general idea.
Thanks in advance.
Tim (the world's oldest newbie)
It's never too late to be a newbie! :-)
Here is a function that returns the all the offsets of a string in a
container:
function offsets tStr,tCntr
-- returns a comma-delimited list of all the offsets of tStr in
tCntr
put "" into mosList
put 0 into startPoint
repeat
put offset(tStr, tCntr,startPoint) into os
if os = 0 then exit repeat
add os to startPoint
put startPoint & "," after mosList
end repeat
if char -1 of mosList = "," then delete last char of mosList
if mosList = "" then return "0"
return mosList
end offsets
Using that, you could first
mark cards where fld <tFld> contains <tStr>
then loop through the marked cards and find the full list of
foundchunks:
put empty into foundList
put length(tStr) into strLength
repeat with c = 1 to the number of marked cards
put the name of marked cd c into cdName
put fld <tFld> of marked cd c into fldContents
put offsets(tStr, fldContents) into offsetList
replace comma with cr in offsetList
repeat for each line f in offsetList
put f & "|" & f+strLength-1 & "|" & cdName & cr after
foundList
-- use pipe char as delimiter,
-- or any other char not found in data
end repeat
end repeat
if char -1 of foundList = cr then delete char -1 of foundList
this will give you the full list of foundchunks in the form:
78|85|card id 1016
266|273|card id 1016
13|20|card id 1018
... etc.
and you can parse this by setting the itemdelim to "|" and referring to
char (item 1 of line n of foundList) to (item 2 of line n of
foundList) of <tFld> of (item 3 of foundList)
to get the chunks.
Not tested, and can probably be streamlined, but you get the idea....
-- Peter
Peter M. Brigham
[email protected]
http://home.comcast.net/~pmbrig
_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode