AppleScript显示对话框和数字数组

时间:2011-08-11 15:30:19

标签: applescript

这是一个相当基本的问题,但几乎没有AppleScript经验。我有一个数组,我想在显示对话框中列出,所以最终输出如下:

Frame Count: 29

Frame Offsets:
12.684
15.909
28.841
46.332
etc.

不幸的是我找不到任何循环遍历这样的数字列表的例子,而没有先将它们全部转换为字符串,所以此刻我就像这样单独调用每个数字:

display dialog "Frame Count: " & FrameCount & return & return & "Frame Offsets: " & return & ((item 1 of DataList) / 1000) & return & ((item 2 of DataList) / 1000) & return & ((item 3 of DataList) / 1000)

这是非常不优雅的(除非事先知道帧数,否则具有挑战性)。有没有办法做到这一点,而无需将这些数字转换为字符串?任何帮助非常感谢: - )

3 个答案:

答案 0 :(得分:2)

如果您考虑到特定格式且操作系统默认值不够好,则无法解决此问题。您必须将列表转换为您需要的特定格式的字符串,并在对话框中显示。

答案 1 :(得分:2)

您必须将数字转换为字符串,但您可以使用循环代替。以下代码适用于instanace:

set FrameCount to 29
set DataList to {12684, 15909, 28841, 46332}

set OffsetString to "Frame Offsets:" & return
repeat with off in DataList
    set OffsetString to OffsetString & (off / 1000) & return
end repeat

display dialog "Frame Count: " & FrameCount & return & return & OffsetString

在这里,您使用每个帧偏移量循环DataList,然后继续追加到OffsetString。请注意,我没有做任何额外的字符串格式化;据我所知,这对AppleScript来说很难。 (例如,12680会变成"12.68"而不是"12.680",这可能是您想要的也可能不是。)它并不华丽,但它与您所获得的一样优雅AppleScript的。

repeat循环具有多种功能;它是AppleScript唯一的循环结构,但它支持while循环,for循环,foreach循环和其他一些东西。

  • repeat while <cond> ... end repeatrepeat until <cond> ... end repeat重复运行他们的身体,直到<cond>分别为真或假。
  • repeat with <var> from <start> to <end> [by <step>] ... end repeat通过将<var>递增<step>来反复运行正文,直到它大于<end>(将by <step>的默认值保留为by 1
  • repeat <n> times ... end repeat运行正文<n>次。
  • repeat with <var> in <list> ... end repeat重复运行身体,<var>等于<list>的每个连续元素
  • repeat ... end repeat是一个无限循环(您可以使用exit repeat保留它或其中任何一个)

答案 2 :(得分:1)

您可以使用AppleScript标准命令choose from list代替display dialog。此命令本机处理数字列表:

set theList to {12.684, 15.909, 28.841, 46.332}
choose from list theList with title "Frame Count: " & (length of theList) with prompt "Frame Offsets:"