Увеличить число в строке на единицу - PullRequest
0 голосов
/ 24 апреля 2018

Очень плохо знаком с Applescript и ищу помощь. У меня уже есть скрипт, который увеличит число в конце этого имени, RM5_CA_0_4C_288.tif, на единицу, и он прекрасно работает. Но иногда мне нужно увеличить эту строку на 1, но в ней есть буквы до или после последнего набора чисел (то есть _A288.tif или _288A.tif). Как мне увеличить число на 1 с буквами до или после него?

Мой сценарий копирует имя файла в буфер обмена, увеличивает его на единицу и вставляет результат обратно в буфер обмена.

Спасибо за помощь!

Оригинальный скрипт для увеличения на один:

try

set oldName to the clipboard

set AppleScript's text item delimiters to {"_"}

set oldNumber to the last text item of oldName

set AppleScript's text item delimiters to {"."}

set oldNumber to the first text item of oldNumber

set newNumber to oldNumber + 1

set newNumber to newNumber & "tif" as string

set xVar to 1
set AppleScript's text item delimiters to {"_"}
set newName to ""
repeat while xVar is less than 5
    set newName to newName & text item xVar of oldName & "_"

    set xVar to xVar + 1
end repeat

set newName to newName & newNumber

set the clipboard to newName as string
on error tell application "Firefox" to display dialog "Error! Check the 'set AppleScript's text item delimiters to' section. Change the delimeter?" buttons ["OK"] default button 1 
return 
end try

В скрипте выполняется включение букв до и после цифр:

set oldName to the clipboard

set AppleScript's text item delimiters to {"_"}

set oldNumber to the last text item of oldName

get result

set returnedString to do shell script "echo " & quoted form of result & " | tr -d '[:upper:]'"

get result

set returnedString to do shell script "echo " & quoted form of result & " | tr -dc '[:digit:]'"

set result to result as number

set newNumber to result + 1

set newNumber to newNumber & ".tif" as string

get result

set theName to do shell script "echo " & quoted form of result & " | tr -d '\"_'"

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вот решение.Использование разделителей текстовых элементов - это прекрасный способ получить последнюю строковую часть, но, поскольку я предлагаю использовать сценарий do shell для вызова регулярных выражений для сопоставления строковых фрагментов, с таким же успехом можно сделать это для каждой части.

set oldName to "RM5_CA_0_4C_288.tif"

-- get everything up through the last _
set firstPart to do shell script "echo " & quoted form of oldName & " | grep -o '\\w*_'"
-- get everything from the last _
set lastPart to do shell script "echo " & quoted form of oldName & " | grep -o '_[a-zA-Z]*[0-9]*[a-zA-Z]*\\.tif'"
-- get the simplified string in the lastPart
set lastPart to text 2 thru -5 of lastPart

try -- check for leading letters
    set preLetters to do shell script "echo " & quoted form of lastPart & " | grep -o '^[a-zA-Z]'"
    set theNumber to do shell script "echo " & quoted form of lastPart & " | grep -o '[0-9]*$'"
    set postLetters to ""
on error
    try -- check for trailing letters
        set postLetters to do shell script "echo " & quoted form of lastPart & " | grep -o '[a-zA-Z]$'"
        set theNumber to do shell script "echo " & quoted form of lastPart & " | grep -o '^[0-9]*'"
        set preLetters to ""
    on error -- has no letters
        set theNumber to lastPart
        set preLetters to ""
        set postLetters to ""
    end try
end try

-- increment the number string
set newNumber to theNumber + 1
-- put humpty dumpty back together again
set newName to firstPart & preLetters & newNumber & postLetters & ".tif"
0 голосов
/ 25 апреля 2018

Оригинальный скрипт для увеличения на один:

try

    set oldName to the clipboard

    set AppleScript's text item delimiters to {"_"}

    set oldNumber to the last text item of oldName

    set AppleScript's text item delimiters to {"."}

    set oldNumber to the first text item of oldNumber

    set newNumber to oldNumber + 1

    set newNumber to newNumber & "tif" as string

    set xVar to 1
    set AppleScript's text item delimiters to {"_"}
    set newName to ""
    repeat while xVar is less than 5
        set newName to newName & text item xVar of oldName & "_"

        set xVar to xVar + 1
    end repeat

    set newName to newName & newNumber

    set the clipboard to newName as string

on error
    tell application "Firefox" to display dialog "Error! Check the 'set AppleScript's text item delimiters to' section.  Change the delimeter?" buttons ["OK"] default button 1
    return
end try
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...