AppleScript для абсолютных новичков

Дата публикации:16.07.2012
Twitter Facebook Vkontakte

Глава 5. Работа с текстом

Переменные служат не только для хранения чисел. Они так же хорошо могут использоваться и для хранения текста. Фрагмент текста, даже если его длина равна нулю или одному знаку, называется строкой (string). Строка должна размещаться между двойными кавычками. В трех примерах [1] переменным с наглядными именами присваиваются соответствующие строковые значения.

set emptyString to "" [1]
set notEmtpyContainsASpace to
set greeting to "Hi there!"

После выполнения сценария [1], поле результата покажет строку в двойных кавычках. Так что, поле результата информирует вас не только о значении, но и о типе данных (числа без кавычек; строки в кавычках).

Поскольку поле результата показывает результат последнего выполненного оператора, отобразится только строка содержащая приветствие [1.3].

В дополнение к полю результата, AppleScript предлагает удобную альтернативу для связи с миром: диалоговое окно. Выглядит это так:

<...>

Его можно вызвать командой "display dialog", после которой следуют данные (число или строка), которые вы хотите показать. Диалог на рисунке выше был создан следующим сценарием [2].

display dialog "Hi there!" [2]

Почему строковые значения имеют двойные кавычки? AppleScript может содержать только очень ограниченный запас слов, а читая ваш скрипт и расшифровывая что инструкция, а что нет, он сильно загрузит компьютер. Поэтому, AppleScript полагается на ключи, которые помогают ему понять значение каждого элемента в операторе сценария. По этой причине мы должны строковое значение помещать в двойные кавычки. Иначе, AppleScript может перепутать строку с именем переменной. Проверьте следующий сценарий [6]:

set stringToBeDisplayed to "Hi there!"
display dialog "stringToBeDisplayed"	[6]
display dialog stringToBeDisplayed

Запустите этот сценарий и вы сами увидите, что произойдет. Оператор [6.2] покажет текст "stringToBeDisplayed", тогда как оператор [6.3] отобразит "Hi there!". Так как Script Editor показывает откомпилированный сценарий различными цветами, легко увидеть, что в операторе [6.3] "stringToBeDisplayed" является именем переменной, и потому окрашена зеленым цветом, в операторе [6.2] "stringToBeDisplayed" показана черным цветом, который указывает, что это слово есть данные (строка). Порой, форматирование с цветом будет помогать вам быстрее отыскивать ошибки.

Как было сказано выше, AppleScript'у нужны ключи для расшифровки англоязычного сценария во что-нибудь понятное Макинтошу. Тут приведен другой пример, почему эти ключи важны: если мы напишем "thirty" как число в двойных кавычках, т.е. как "30", это будет уже не число, а строка. Различать типы данных - очень важно, потому что некоторые операции могут быть выполнены только с конкретным типом данных. Например, вы можете разделить два числа, но вы не сможете разделить одну строку на другую. Давайте взглянем на пару операций, которые можно выполнять над строками.

Подобно числам (и избирателям), строками можно манипулировать. Вы можете склеить строки вместе используя амперсанд, такая операция называется конкатенация (объединение) [7].

set nameOfActress to "Julia"
set actressRating to "very pretty"
set resultingString to nameOfActress & " is" & actressRating	[7]
display dialog resultingString

В третьем операторе [7.3], мы объединяем три строки, две из которых представлены переменными.

Пожалуйста, обратите внимание, что количество пробелов между строкой и амперсандом не влияет на результирующую строку, содержащуюся в переменной resultingString. После компиляции, Script Editor уменьшит число пробелов до одного, если вы поставили более чем один. Если вам нужен один или более пробелов, чтобы разделить слова в показываемом предложении, вам надо поставить их внутри двойных кавычек строки. В операторе [7.3], кроме пробела слева от слова "is", должен быть еще один пробел, следующий за буквой "s" слова "is".

Есть еще команды для работы со строками. Некоторые из них требуют дополнительных знаний, мы встретимся с ними в следующих главах, так что на данный момент оставим их в стороне. Но мы можем дать вам пример одной команды относящейся к строкам. Вы можете узнать длину строки [8].

set theLength to the length of "I am"	[8]

Если вы запустите этот сценарий, то результат, показанный в поле результата, будет - 4. Так что запомните, что при вычислении длины строки, также считаются и пробелы.

Так как двойные кавычки используються для обозначения начала и конца строки, вам может показаться, что строка не может содержать двойные кавычки. Конечно, язык AppleScript предлагает обходной путь, называемый "эскейпинг" (escaping). Просто добавьте обратную косую черту перед двойной кавычкой, и AppleScript больше не будет пытаться интерпретировать двойную кавычку как конец строки [9].

set exampleString to "She said: \"Hi,  I'm Julia.\""	[9]

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

blah blah \" blah.

Сперва, мы поставим обратную косую черту перед косой чертой. Это означает, что AppleScript будет игнорировать любое специальное значение следующего символа, то есть значение второй обратной косой черты. Конечно, нам все еще надо уберечь нашу двойную кавычку, иначе AppleScript сочтет, что наша строка закончилась в этом месте. Следовательно, двойной кавычке должна предшествовать обратная косая черта, подобно тому как мы видели раньше. Собрав всё это вместе, мы прийдем к следующему оператору [10].

display dialog "blah blah \\\" blah"	[10]

Для удобства, я показал эскейп-символы (обратные косые черты) жирными, хотя Script Editor этого не делает. Будьте осторожны с обратной косой чертой, потому что она может иметь особое значение и перед некоторыми другими символами. Например, \n обозначает новую строку (аналогично Return - возврат каретки), и \t обозначает табуляцию (Tab).

Как сказано выше, числа и строки - различные типы данных. Вы не можете вычесть число три из строки [11].

set nonsensical  to "fifteen" - 3	[11]

Если вы попытаетесь выполнить сценарий [11], вы поймете насколько дружественен язык AppleScript. Он действительно попытается конвертировать строку в число. Если строка была бы "15", вместо "fifteen", эта конвертация сработала бы. Конвертирование одного типа данных в другой называется преобразованием (coercion). Вы можете произвести преобразование как показано в следующих двух примерах [12]

set coercedToNumber to "15" as number
set coercedToString to 12 as string	[12]

В поле для результатов программы Script Editor виден результат выполнения последнего оператора [12.2]. Данные содержащиеся в "coercedToString" - являются строкой, так как двойные кавычки ясно указывают на это.

Для сценария заканчивающегося первым оператором [12.1], поле результата показало бы 15 без двойных кавычек, указывая что результат число, а не строка.

Дополнительная информация

  1. Полный вариант книги (rtf/7z)-- электронная книга с сохранением иллюстраций, форматирования, изменений в цвете шрифта.


Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2019