0

簡単な質問: 次の AppleScript コードの何が問題になっていますか? これが行うべきことは、文字列内の (ユーザーが指定した区切り記号で区切られた) テキスト項目の位置を取得することです。しかし、これまでのところ、うまくいきません。スクリプト デバッガーは、特定のエラーなしで単に「return_string_position を続行できません」と表示します。何が間違っているかについてのアイデアはありますか?

tell application "System Events"
    set the_text to "The quick brown fox jumps over the lazy dog"
    set word_index to return_string_position("jumps", the_text, " ")
end tell

on return_string_position(this_item, this_str, delims)
    set old_delims to AppleScript's text item delimiters
    set AppleScript's text item delimiters to delim
    set this_list to this_str as list
    repeat with i from 1 to the count of this_list
         if item i of this_list is equal to this_item then return i
    end repeat
    set AppleScript's text item delimiters to old_delims
end return_string_position
4

2 に答える 2

0

あなたの問題は、システムイベントがその関数return_string_positionがそれ自身のものであると考えていることです(辞書を見ると、そうではないことがわかります)。これは非常に簡単に解決できます。myを呼び出す前に追加するだけreturn_string_positionです。

新しいコード:

tell application "System Events"
    set the_text to "The quick brown fox jumps over the lazy dog"
    set word_index to my return_string_position("jumps", the_text, " ")
end tell
...

または、adayzdoneのソリューションを使用できます。この場合、単純なテキストを処理するときにシステムイベントをターゲットにする必要がないため、彼/彼女のソリューションは仕事に最適です。

于 2012-09-05T16:22:14.570 に答える
0

tell system events コマンドは正しくないため、除外する必要があります。また、単語のリストを作成するために " " のテキスト項目区切り記号を使用する必要はありません。単に "every word of" を使用してください。最後に、コードは渡されたパラメーターの最後の一致のみを返します。これは各一致を返します。

on return_string_position(this_item, this_str)
    set theWords to every word of this_str
    set matchedWords to {}
    repeat with i from 1 to count of theWords
        set aWord to item i of theWords
        if item i of theWords = this_item then set end of matchedWords to i
    end repeat
    return matchedWords
end return_string_position

return_string_position("very", "The coffee was very very very very very ... very hot.")
于 2012-09-05T15:53:10.973 に答える