AppleScript: индекс подстроки в строке - PullRequest
9 голосов
/ 11 ноября 2009

Я хочу создать функцию, которая возвращает подстроку определенной строки от начала указанной строки до, но не включая начало другой конкретной строки. Идеи?


Так что-то вроде:

substrUpTo(theStr, subStr)

поэтому, если бы я ввел substrUpTo("Today is my birthday", "my"), он вернул бы подстроку первого аргумента вплоть до, но не включая начало второго аргумента. (то есть он вернул бы "Today is ")

Ответы [ 3 ]

9 голосов
/ 15 ноября 2009
set s to "Today is my birthday"
set AppleScript's text item delimiters to "my"
text item 1 of s
--> "Today is "
4 голосов
/ 30 мая 2013

Встроенная команда offset должна сделать это:

set s to "Today is my birthday"
log text 1 thru ((offset of "my" in s) - 1) of s
--> "Today is "
0 голосов
/ 12 ноября 2009

Вероятно, немного глупо, но это делает работу ...

property kSourceText : "Today is my birthday"
property kStopText : "my"

set newSubstring to SubstringUpToString(kSourceText, kStopText)

return newSubstring -- "Today is "

on SubstringUpToString(theString, subString) -- (theString as string, subString as string) as string

    if theString does not contain subString then
        return theString
    end if

    set theReturnString to ""

    set stringCharacterCount to (get count of characters in theString)
    set substringCharacterCount to (get count of characters in subString)
    set lastCharacter to stringCharacterCount - substringCharacterCount

    repeat with thisChar from 1 to lastCharacter
        set startChar to thisChar
        set endChar to (thisChar + substringCharacterCount) - 1
        set currentSubstring to (get characters startChar thru endChar of theString) as string
        if currentSubstring is subString then
            return (get characters 1 thru (thisChar - 1) of theString) as string
        end if
    end repeat

    return theString
end SubstringUpToString
...