使用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))
我正在尝试构建一个 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))