Ошибка при вставке буфера обмена через Applescript - PullRequest
0 голосов
/ 01 ноября 2011

Написание сценария, помогающего синхронизировать мои списки воспроизведения между компьютерами.

Я подумал, что сделаю это с помощью appleScript.

Первая половина - это экспорт в m3u, с чем я застрял.

Код:

property delimiter_character : " - "

tell application "iTunes"

set this_playlist to playlist "Alternative Mixtape"
set this_name to (the name of this_playlist) as string

set the playlist_count to the count of tracks of this_playlist
set playlist_data to {}
tell this_playlist
    repeat with i from 1 to the count of tracks
        tell track i
            set the end of the playlist_data to {name, delimiter_character, artist, return, location, return}
        end tell
    end repeat
end tell

end tell

set FileName to "Path:To:File.m3u"
set theFile to open for access FileName with write permission
write playlist_data to theFile
close access theFile

Проблема в том, что я получаю всевозможные "искаженные" выходные данные:

listlistutxt Hips Of The Yearutxt - utxtMistutxt
alisvvHDD…ÏXËH+Ï›Hips Of The Year.mp3χ»g∏mMp3 hookˇˇˇˇ Bye Bye…Ï<»»gúMϛϋ’.HDD:Music:Mist:Bye Bye:Hips Of The Year.mp3*Hips Of The Year.mp3HDD(/Music/Mist/Bye Bye/Hips Of The Year.mp3

Я пытался преобразовать буфер обмена в обычный текст, но постоянно получаю сообщение об ошибке при попытке скопировать как класс UTF8 или как запись.

1 Ответ

0 голосов
/ 02 ноября 2011

м3у - это текстовый файл. Ваша проблема в вашем коде, playlist_data создается в виде списка. На самом деле это список списков, который еще сложнее. Итак, вы пишете список в файл в виде текста ... вот как он все испортил. Попробуйте этот код. Он создает playlist_data в виде текста вместо списка, поэтому он правильно записывает в файл. Я сделал пару других оптимизаций тоже. Надеюсь, это поможет.

ПРИМЕЧАНИЕ: вам придется изменить значения playlistName и filePath на ваши значения.

property delimiter_character : " - "

set playlistName to "CD 01"
set filePath to (path to desktop as text) & "cd01.txt"

tell application "iTunes"
    set theTracks to tracks of playlist playlistName

    set playlist_data to ""
    repeat with aTrack in theTracks
        tell aTrack
            set trackName to name
            set trackArtist to artist
            set trackLocation to location
        end tell
        set playlist_data to playlist_data & trackName & delimiter_character & trackArtist & return & trackLocation & return & return
    end repeat
end tell

try
    set theFile to open for access file filePath with write permission
    write playlist_data to theFile
    close access theFile
on error
    close access file filePath
end try

Последнее, что нужно отметить. Вы также можете записать список playlist_data в файл. Вы должны указать оператору write записать данные в виде списка в этой строке «записать playlist_data в theFile as list». Вы не указали ничего в части «as» этого оператора, и поэтому он выполняет поведение по умолчанию при записи файла в виде текста. Но вы можете указать «список», если хотите. Вы заметите, что вы не сможете прочитать файл с помощью текстового редактора, если вы сделаете это, однако преимущество заключается в том, что вы можете позже прочитать этот файл «в виде списка» обратно в appleScript и получить данные обратно в формате списка. , Это не подходит для вашей задачи по написанию файла m3u.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...