1

I'm trying to check the values for an accurate count but I'm having issues with the stepping process. Given the extraction of:

1-1
2-1
3-1
4-1
5-1
6-1
7-1
7-2
8-1
9-1
9-2
9-3
9-4
10-1
11-1
12-2 ## intentionally left out 12-1 to throw error
13-1

how can I properly increment through the list and flag if one is missing. When I run my script it runs through 7-2 but when it comes to 8-1 it fails with:

A child marker seems to be missing.

the code:

tell application "BBEdit"
    activate
    set parentCount to 1
    set childCount to 1
    set theDoc to text document 1
    select insertion point before first character of theDoc
    set searchOpt to {search mode:grep, wrap around:false}
    repeat
        set theNumbers to find "^(\\d{1,4})-(\\d{1,4})" searching in text 1 of theDoc options searchOpt with selecting match
        if not found of theNumbers then exit repeat
        set parentNum to (grep substitution of "\\1") as number
        set childNum to (grep substitution of "\\2") as number
        if parentNum is equal to parentCount and childNum is equal to childCount then
            set parentCount to parentCount + 1
        else if parentNum is equal to parentCount and (childNum + 1) is equal to childCount then
            set parentCount to parentCount + 1
            set childCount to 1
        else
            display dialog "missing marker"
        end if
    end repeat
    display dialog "completed check"
end tell

In AppleScript how can I properly increment through a sequence of numbers?

DᴀʀᴛʜVᴀᴅᴇʀ
  • 7,681
  • 17
  • 73
  • 127

1 Answers1

0

In your conditional statements, you use the same condition if parentNum is equal to parentCount, the second conditional statement doesn't work , because the script increases the parentCount in these two conditional statements, and your script never increases the childCount.

Use this script:

tell application "BBEdit"
    activate
    set parentCount to 0
    set childCount to 1
    set theDoc to text document 1
    select insertion point before first character of theDoc
    set searchOpt to {search mode:grep, wrap around:false}
    repeat
        set theNumbers to find "^(\\d{1,4})-(\\d{1,4})" searching in text 1 of theDoc options searchOpt with selecting match
        if not found of theNumbers then exit repeat
        set parentNum to (grep substitution of "\\1") as number
        set childNum to (grep substitution of "\\2") as number
        if parentNum = (parentCount + 1) and childNum = 1 then --  if the parentNum increase of 1, the childNum must be 1
            set parentCount to parentCount + 1
            set childCount to 1 -- so, reset the childCount  to 1
        else if parentNum = parentCount and childNum = (childCount + 1) then
            set childCount to childNum
        else
            display dialog "missing marker"
            set parentCount to parentNum -- start at this value for the next sequence
            set childCount to childNum -- start at this value for the next sequence
        end if
    end repeat
    display dialog "completed check"
end tell
jackjr300
  • 7,111
  • 2
  • 15
  • 25