статьи
форум
VIP-акции
практика
о компании
прайс-лист
доставка
контакты
работаем без выходных
Ваш город: Санкт-Петербург изменить
Москва
Ставрополь

Гарантийные сервисные центры в регионах
 
главная > статьи > Макинтош > AppleScript — это совсем не страшно  

← Отдел электроники Отдел силовой техники →

Станьте нашим клиентом, нажмите, чтобы получить скидку 15% на ремонт

количество просмотров: 7021
дата публикации: 25:08:2006

Страницы: 1 2 3

 

Пишем Droplet

Итак, что мы хотим получить, и как этого добиться.

  1. Программа должна работать независимо от редактора скриптов. С этим все ясно, мы уже знаем, что для этого ее нужно сохранить как апплет.
  2. Цель работы скрипта — изменение свойств заданного файла. Эта часть у нас уже готова.
  3. Обрабатываться должен файл, «натащенный» на картинку скрипта. Вот тут и начинается самое интересное. С «живущими» в нашем компьютере объектами постоянно происходят разные события. Например файл может быть перемещен, скопирован или открыт. Программа — запуститься, выполнять какие-либо команды или не делать ничего, наконец — завершиться. Чтобы объект «знал», как ему реагировать на то или иное событие, нужна специальная подпрограмма — «обработчик» (handler). Когда на апплет «бросают» файлы, папки или диски, Finder передает ему сообщение-команду «Open» и список «брошенных» объектов. Вот для этого-то события нам и придется написать обработчик.

В простейшем случае он будет выглядеть вот так:

on open FileList -- словом «on» начинается обработчик события
-- сперва скрипт работает сам, не затрагивая никаких программ
set MyFile to item 1 of FileList
tell application "Finder" -- теперь командуем Finder'ом
set file type of MyFile to "TEXT"
set creator type of MyFile to "ttxt"
end tell
end open -- не забываем указать, что обработчик закончился

Для временного хранения списка мы использовали переменную FileList. Называть переменные можно любыми сочетаниями латинских букв, но желательно так, чтоб по имени можно было понять, что же эта переменная обозначает.

Как видите, обрабатывается первый элемент из переданного при запуске скрипта списка. А остальные? На них наша программа просто не обращает внимания. Не трудно догадаться, что следующим шагом по пути к совершенству будет обработка сразу целой кучи файлов.

Раз, раз, еще раз…

До сих пор все команды наших скриптов выполнялись поочередно в том порядке, как записаны. Теперь же нам нужно повторить одни и те же действия несколько раз подряд. Придется организовать особую структуру — цикл. В AppleScript есть для этого разнообразные управляющие команды. Можно повторить действия наперед заданное число раз, либо выполнять их пока соблюдается некоторое условие. Но такими циклами располагает практически любой язык программирования. В нашей же задаче идеально подойдет другой — »повторить для каждого элемента списка». С ним скрипт примет следующий вид:

on open FileList
repeat with MyFile in FileList -- так записывают начало цикла
tell application "Finder"
set file type of MyFile to "TEXT"
set creator type of MyFile to "ttxt"
end tell
end repeat -- конец управляющей структуры обязательно отмечаем
end open

Чего еще не хватает нашей программе, чтоб стать вполне профессиональной? А не хватает ей «защиты от дурака». Ведь «бросить» на картинку скрипта можно и папки, и ярлыки, а работать он должен только с обычными файлами.

Кого хочешь, выбирай

Стало быть, перебирая элементы списка, нужно определять, чем каждый из них является. Только если попался обычный файл — менять его свойства. Выбрать, делать или не делать какие-либо операции, позволяет еще одна управляющая конструкция — условный оператор If. Определить, не является ли объект папкой или ярлыком, можно, получив информацию о нем командой «info for» из Standard Additions. Результатом ее будет объект класса «file information». Вот его-то свойства — «папка?» (folder) и «ярлык?» (alias) — мы и будем проверять. Поскольку нам необходимо, чтоб элемент не был папкой И не был ярлыком, два условия свяжем логической операцией «and» (когда достаточно выполнения какого-либо одного из условий — ИЛИ первого, ИЛИ второго — пользуются связкой «or»). В общем, в результате наших рассуждений получился вот такой скрипт:

on open FileList
repeat with MyFile in FileList
set theInfo to info for MyFile
if (folder of theInfo is false) and
(alias of theInfo is false) then
tell application "Finder"
set file type of MyFile to "TEXT"
set creator type of MyFile to "ttxt"
end tell
end if
end repeat
end open

Не забываем, что сохранить его нужно как приложение (application). Ну, вот и все. Наша первая программа готова.

Обратите внимание, что все условия в операторе If должны быть записаны в одну строчку. Чтобы сделать текст программы более удобным для чтения, бывает полезно «сложить» длинную строку, как сделано в этом примере. Для этого нужно нажать комбинацию клавиш «Option-Return». В тексте появится символ продолжения — «¬».

Конечно, за это небольшое занятие я смог только немного познакомить Вас с самыми простыми приемами работы с AppleScript. Но, думаю, Вы убедились, что в этом нет ничего сложного. Пробуйте! Я же надеюсь продолжить эту тему в следующих статьях.

 

1 2 3

 

Список ссылок:

     

     

     

    Почему мы лучше

    Максимум 2 дня до диагностики (при сдаче ноутбука в любом из отделений)

    бесплатная диагностика по многим видам техники

    10 лет опыта

    Работаем без выходных

    Полный спектр услуг по ноутбукам и сварочной технике