Applescript - Как перебирать треки - PullRequest
5 голосов
/ 03 мая 2010

Я новичок в яблочном сценарии. Я пытался узнать это из различных источников, таких как сайт Дуга , macscripter и этот форум

Я просто пытался напечатать на экране все названия треков, используя этот код:

tell application "iTunes"
    set myTracks to (tracks of library playlist 1)
    repeat with aTrack in myTracks
        get name of aTrack
    end repeat
end tell

Но он печатает только одно название трека, возможно, последнее ...

Итак, как лучше всего перебрать список?

ТИА

Bob

Ответы [ 2 ]

13 голосов
/ 03 мая 2010

Ваш код в порядке; причина, по которой ничего не происходит, в том, что get ... ищет значение и возвращает его. Однако вы ничего не делаете с возвращаемым значением, поэтому оно игнорируется, и только последняя итерация цикла возвращает что-либо. Вам нужно сделать что-то (что угодно) внутри цикла, которое видно внешнему миру: назначить переменную, отобразить диалог, что угодно.

Если вы хотите собрать список названий предметов, вы можете сделать следующее:

tell application "iTunes"
  set trackNames to {}
  repeat with aTrack in tracks of library playlist 1
    set trackNames to trackNames & name of aTrack
  end repeat
end tell

Однако, вы можете затянуть это. Одна из мощных функций AppleScript заключается в том, что вы можете получить название каждой дорожки в списке и выполнить итерацию по ней:

tell application "iTunes"
  set trackNames to {}
  repeat with aName in name of tracks of library playlist 1
    set trackNames to trackNames & aName
  end repeat
end tell

Но на этом этапе вам даже не нужен цикл, и вы можете использовать гораздо более простой

tell application "iTunes" to name of tracks of library playlist 1

И в качестве бонуса это будет на намного быстрее: в моем быстром тесте три версии заняли 16,189 секунды, 32,656 секунды и 0,296 секунды соответственно.

4 голосов
/ 03 мая 2010

Я думаю, что ваш ответ правильный. Я считаю, что результат в столбце редактора сценариев Apple печатает только последний результат вашего сценария. Если вы заглянули в «Событие» и ответили, вы должны увидеть ответы, правильно возвращаемые вашим сценарием.

Я попробовал себя, используя этот скрипт:

tell application "iTunes"
set myTracks to (tracks of library playlist 1)

repeat with i from 1 to number of items in myTracks
    get name of item i of myTracks
end repeat

Это можно увидеть в ответах:

* +1007 *

получить имя файла дорожки с идентификатором 4050 из ID плейлиста библиотеки 3379 с идентификатором источника 41

--> "Le deserteur"

получить имя файла дорожки с идентификатором 4051 из ID плейлиста библиотеки 3379 с идентификатором источника 41

--> "Le lyon est mort ce soir"

Также, просто чтобы убедиться, что это работает, вы можете попробовать это:

 tell application "iTunes"
    set myTracks to (tracks of library playlist 1)

    repeat with i from 1 to number of items in myTracks
        display dialog name of item i of myTracks as string
    end repeat

end tell

Так что это работает, вам нужно сделать только то, что вы хотите сделать до конца цикла.

Кроме того, я бы предложил официальную документацию Apple: руководство по языку AppleScript. Бесплатно и очень полно для начала.

Надеюсь, это поможет!

...