applescript, преобразующий список в текстовый файл

Я пытаюсь записать все названия песен в iTunes в текстовый документ. Первая проблема, с которой я столкнулся, заключалась в том, что я не могу правильно зациклить операцию. Вот мой тестовый пример с первыми 15 песнями в моем iTunes:

tell application "TextEdit"  
    make new document  
end tell  
tell application "iTunes"  
    set trNameID1 to name of track 1  
    set trNameID2 to name of track 2  
    set trNameID3 to name of track 3  
    set trNameID4 to name of track 4  
    set trNameID5 to name of track 5  
    set trNameID6 to name of track 6  
    set trNameID7 to name of track 7  
    set trNameID8 to name of track 8  
    set trNameID9 to name of track 9  
    set trNameID10 to name of track 10  
    set trNameID11 to name of track 11  
    set trNameID12 to name of track 12  
    set trNameID13 to name of track 13  
    set trNameID14 to name of track 14  
    set trNameID15 to name of track 15  
    tell application "TextEdit"  
        set text of document 1 to {trNameID1 & "  
", trNameID2 & "  
", trNameID3 & "  
", trNameID4 & "  
", trNameID5 & "  
", trNameID6 & "  
", trNameID7 & "  
", trNameID8 & "  
", trNameID9 & "  
", trNameID10 & "  
", trNameID11 & "  
", trNameID12 & "  
", trNameID13 & "  
", trNameID14 & "  
", trNameID15} as text  
    end tell  
end tell

Когда я пытаюсь зациклить его, текстовый документ содержит только название последней песни, например:

tell application "TextEdit"  
    make new document
end tell
tell application "iTunes"
    set trNum to 1
    repeat 15 times
        set trNameID to name of track (trNum)
        tell application "TextEdit"
            set text of document 1 to trNameID & "
"
        end tell
    end repeat
end tell

Это выведет в текстовый документ только название пятнадцатой песни.

Я понимаю, что это может быть очень просто, но я буквально использую applescript около 48 часов, и я не могу понять это. Я хотел бы, чтобы все названия песен были в текстовом документе, чтобы я мог читать и анализировать строки на С++. У кого-нибудь есть идеи?

Кроме того, я не уверен, есть ли способ в AppleScript просмотреть всю библиотеку iTunes и увидеть последнюю песню, записать идентификатор этой песни в iTunes, а затем создать повторный цикл, который проходит через этот идентификатор. Таким образом, цикл будет работать ровно для того количества песен, которые есть в библиотеке.

Любые идеи будут очень признательны!


person Community    schedule 03.07.2013    source источник


Ответы (3)


Вам вообще не нужен повторный цикл. Вы можете получить названия треков прямо из iTunes. Вы получаете его в формате списка, поэтому мы просто преобразуем этот список в строку, разделяющую элементы списка символом возврата. Затем пишем его в TextEdit. Таким образом, этот код оптимизирует код @Michele Percich, устраняя цикл повторения и используя разделители текстовых элементов applescript для преобразования списка в строку для использования в TextEdit.

tell application "iTunes"
    set trackNames to name of every track in (first playlist whose special kind is Music)
end tell

set text item delimiters to return
set trackNames to trackNames as text
set text item delimiters to ""

tell application "TextEdit"
    make new document
    set text of document 1 to trackNames
end tell
person regulus6633    schedule 04.07.2013

Вам нужно увеличить значение переменной trNum в конце цикла повторения:

set trNum to trNum + 1

Или лучше используйте другой синтаксис repeat:

repeat with trNum from 1 to 15

А также добавить (а не заменить) название трека в документ:

set text of document 1 to text of document 1 & trNameID & return

Однако это, вероятно, лучший способ сделать то, что вы хотите:

tell application "iTunes"
    set trackList to ""
    set allTracks to every track in (first playlist whose special kind is Music)
    repeat with currentTrack in allTracks
        set trNameID to name of currentTrack
        set trackList to trackList & trNameID & return
    end repeat
end tell
tell application "TextEdit"
    make new document
    set text of document 1 to trackList
end tell
person Michele Percich    schedule 04.07.2013

я вижу, вы все используете:

сказать приложение "TextEdit"

сделать новый документ

установить текст документа 1 в trackNames

конец скажи

команда Вы можете использовать более быстрый способ:

установить textlocation на "/users/yourusername/desktop/test.txt"

установите для Line_1 значение «Здравствуйте, это первая строка, если вы хотите больше строк, просто скопируйте > этот скрипт и измените переменные».

сделать сценарий оболочки "echo" и цитируемая форма Line_1 & ">>" и цитируемая форма textlocation

Вы можете увидеть в скрипте 2 знака ">>", это добавит каждую текстовую строку в новую строку в текстовом файле. Если есть только один «>», текст заменит другой текст.

Вот пример:

Сначала с 2 строками ">>"

do shell script "echo Эй, это одна строка. >> /Users/Yourusername/desktop/Add.txt"

сделать сценарий оболочки "echo И это второй. >> /Users/Yourusername/desktop/Add.txt"

Этот скрипт создаст текстовый файл следующим образом:

Эй, это одна строка.

И это второй.

Теперь с 2 строками ">"

сделать сценарий оболочки «эхо Эй, это одна строка> /Users/Zl109819/desktop/Add.txt»

сделать шелл-скрипт "echo А это второй > /Users/Zl109819/desktop/Add.txt"

Этот скрипт создаст текстовый файл следующим образом:

И это второй.

person ZWEKKERBOY    schedule 02.05.2016