applescript将列表转换为txt文件

时间:2013-07-03 22:49:58

标签: applescript itunes-sdk

我正在尝试将我的iTunes的所有歌曲名称写入txt文档。我遇到的第一个问题是我似乎无法正确循环操作。以下是我的iTunes中前15首歌曲的测试用例:

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

当我尝试循环播放时,txt文档只包含最后一首歌曲名称,例如:

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

这只会将第15首歌曲的名称输出到txt文档。

我意识到这可能是非常基本的,但我确实使用了AppleScript大约48小时,我似乎无法弄清楚这一点。我希望所有歌曲名称都在txt文档中,这样我就可以用c ++读取和分析字符串。有没有人有任何想法?

另外,我不确定在AppleScript中是否有办法查看整个iTunes资料库并查看最后一首歌曲,在iTunes中录制该歌曲的id,然后制作一个通过该ID的重复循环。通过这种方式,循环可以完全适用于库中的歌曲数量。

非常感谢任何想法!

3 个答案:

答案 0 :(得分:2)

你根本不需要重复循环。您可以直接从iTunes获取曲目名称。您以列表格式获取它,因此我们只需将该列表转换为将列表项与返回字符分隔开的字符串。然后我们将它写入TextEdit。因此,此代码通过消除重复循环并使用applescript的文本项分隔符将列表转换为字符串以在TextEdit中使用来优化@Michele Percich的代码。

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

答案 1 :(得分:1)

您需要在重复循环结束时增加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

答案 2 :(得分:0)

我看到你们都使用了:

  

告诉应用程序“TextEdit”

     

制作新文件

     

将文档1的文本设置为trackNames

     

告诉

命令 您可以使用更快的方式:

  

将textlocation设置为“/users/yourusername/desktop/test.txt”

     

将Line_1设置为“Hello这是第一行,如果你想要更多行只是复制>这个脚本并更改变量。”

     

做shell脚本“echo”&引用的形式为Line_1& “>>”&引用形式的文本位置

您可以在脚本中看到2“>>”这将在txt文件中的新行中添加每个文本行。 如果只有一个“>”文本将替换其他文本。

以下是一个例子:

首先使用2“>>”线

  

做shell脚本“回声嘿这是一行。>> /Users/Yourusername/desktop/Add.txt”

     

做shell脚本“echo这是第二个。>> /Users/Yourusername/desktop/Add.txt”

此脚本将生成如下的txt文件:

  
    

嘿,这是一行。

         

这是第二个。

  

现在有2“>”线

  

做shell脚本“回声嘿这是一行> /Users/Zl109819/desktop/Add.txt”

     

做shell脚本“echo这是第二个> /Users/Zl109819/desktop/Add.txt”

此脚本将生成如下的txt文件:

  
    

这是第二个。