This sounded like a fun puzzle to solve:

On 20/02/2010, at 7:17 PM, J. Landman Gay wrote:

> Glen Bojsza wrote:
>> Sorry to bother everyone but either I'm tired or brain dead.
>> I have a field which has hundreds of lines.
>> For all [ in the field I need to check to see if the character to it's
>> immediate left is a number.
>> If it is a number then the [ is to be converted into an _.
>> If it is not a number then the [ is to be removed (no substitution or
>> spaces).
>> I need to be able to cycle through the entire field which each line may
>> contain several [.
>> Any thoughts would be appreciated as I have tried using a combination of
>> find characters and foundchunk on the field without success.
> 
> This sounds like a perfect job for the replacetext command; regular 
> expressions are ideal for this kind of problem. You won't need any loops, 
> though you may need to run it twice, once to get all the brackets followed by 
> numbers, and a second time to remove the single brackets. If Alex or Ken or 
> someone else doesn't step in first, I'll see if I can get the regex worked up 
> for you tomorrow. Maybe someone even knows how to test for both situations 
> and replacements in the same expression. I know there's a way to do that but 
> I'm not sure how.
> 
> At any rate, once you get the right regex figured out, it's a one-liner to do 
> what you want.

I tried using replaceText(), but the problem is that it replaces the *entire* 
text which is 'recognised' by the regex. That would cause problems here. For 
instance, pinpointing all the "[" characters that are not preceded by a number 
is easy via regex - the regex is "[^0-9]\[". But the problem is that the 
'replaceText' command will identify and replace *everything* in my expression, 
not just part of it. So, if in this case I ask it to:

replaceText( field "sourceField", "[^0-9]\[", empty)

... it not only deletes the '[', but also the number preceding it.

I came across problems with matchChunk, too, but for a different reason. I 
wanted to use it in a loop, so I could delete the required parts of each match. 
Unfortunately, even though it was returning 'true' to my regex - it *was* 
finding matches - it refused to populate my 'positionvars', so it was useless. 

I ended up writing a simple repeat loop, which seems to have done the trick:

repeat with x = number of chars in field "sourceField" down to 1
      if char x of field "sourceField" is not "[" then next repeat
      if char (x-1) of field "sourceField" is a number then put "_" into char x 
of field "sourceField"
      else put empty into char x of field "sourceField"
 end repeat

I hope this helps!


--
Igor de Oliveira Couto
Sydney, Australia




_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to