使用applescript按文本文件中的值对字符串进行排序

Sort string by values in text file using applescript

我正在尝试构建一个 applescript 来对 iTunes 中音乐文件的流派字段中的标签进行排序。

我在流派字段中使用分号分隔的列表,如下所示:摇滚;艺术摇滚;女歌手

我要排序的字符串在我的脚本中名为 genreList:

{"Art Rock", "Female Vocalists", "Rock"}

我的首选标签顺序列为 sortList:

{"Rock", "Dance", "Art Rock", "New Wave", "Female Vocalists", "Male Vocalists"}

我想让genreList中的项目按照sortList排序,像这样:

{"Rock", "Art Rock", "Female Vocalists"}

如何使用第二个列表对第一个列表进行排序?我在这里和 Google 上搜索过,但由于我是脚本新手,我什至不确定我是否在搜索正确的术语。

试试这个,select iTunes 中的一个或多个曲目和 运行 脚本。

如果分隔符应该是分号+space,请更改第二行属性。

如果流派 属性 不包含分隔符,则不会有任何更改。

如果流派与排序列表中的项目不匹配,它将附加在末尾。

property sortedGenreList : {"Rock", "Dance", "Art Rock", "New Wave", "Female Vocalists", "Male Vocalists"}
property separator : ";"

tell application "iTunes" to set selectedItems to (get selection)
if selectedItems is {} then
    display dialog "Nothing selected" buttons {"Cancel"} default button 1
end if

set {TID, text item delimiters} to {text item delimiters, separator}
repeat with aTrack in selectedItems
    set orderedGenreList to {}
    set nonOrderableGenres to {}
    tell application "iTunes" to set trackGenreList to text items of (get genre of aTrack)
    if (count trackGenreList) > 1 then
        repeat with aGenre in trackGenreList
            if sortedGenreList does not contain aGenre then set end of nonOrderableGenres to contents of aGenre
        end repeat
        repeat with aGenre in sortedGenreList
            if trackGenreList contains aGenre then
                set end of orderedGenreList to contents of aGenre
            end if
        end repeat
        set orderedGenres to (orderedGenreList & nonOrderableGenres) as text
        tell application "iTunes" to set genre of aTrack to orderedGenres
    end if
end repeat
set text item delimiters to TID

如果你想使用每行一个流派的文本文件,请将第一个 属性 行替换为

set sortedGenreList to paragraphs of (read (choose file))