Диалоговое окно отображения AppleScript и числовые массивы - PullRequest
0 голосов
/ 11 августа 2011

Здесь довольно простая проблема, но почти нет опыта работы с 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 ]

2 голосов
/ 11 августа 2011

Вам нужно преобразовать числа в строку, но вместо этого вы можете использовать цикл. Следующий код работает, например:

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, для циклов, циклов foreach и некоторые другие вещи.

  • repeat while <cond> ... end repeat и repeat 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 голосов
/ 11 августа 2011

Невозможно обойти это, если вы имеете в виду определенный формат и значения по умолчанию ОС недостаточно хороши.Вы должны преобразовать свой список в строку в нужном вам формате, и они отобразятся в диалоговом окне.

1 голос
/ 11 августа 2011

Вы можете использовать стандартную команду AppleScript , выбрать из списка вместо 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:"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...