Как превратить список AppleScript в строку
Пытаясь научиться использовать записи и списки AppleScript с максимальной отдачей, я пытался создать отчет о проекте BBEdit, но нахожу очень ограниченную документацию. Я задал вопрос вчера, пытаясь выяснить, почему мой шаблон поиска не работает, но после выяснения, что проблема была от меня не хватает returning results:true
Я смог получить запись результата и подтвердил, что это была запись после прочтения Class и запуска:
class of findFunction
Поскольку он говорит, что это запись, я рассмотрел здесь и побежал length of findFunction
а также count of findFunction
и они оба вернулись 2. Мне было любопытно узнать, какие два элемента были в записи, поэтому я использовал return findFunction
и было сказано:
found: true
found matches: list of X items
Желая узнать, где и какие файлы соответствий были найдены в списке, я сделал еще несколько поисков, прочитал списки и записи и запустил:
set theMatches to get found matches of findFunction
он возвратил элементы списка и проверил новую переменную с помощью get count of theMatches
Я могу получить количество предметов в целевом списке внутри записи. Когда я проверяю, что в списке (узнал из: Как получить значение из списка со строкой в AppleScript? И Поиск элементов в списке), я могу сделать вывод, что при использовании find
В BBEdit каждый элемент списка содержит:
end_offset :
match_string :
message :
result_file :
result_kind :
result_line :
start_offset :
Экспериментируя с элементом, я установил переменную с помощью:
set itemOne to get item 1 of theMatches
и проверил, работает ли он с:
display dialog (result_file of itemOne) as text
и диалог с полным путем файла был отображен. Пытаясь использовать DRY, я создал:
set filesResult to get (result_file of (get item 1 of theMatches)) as text
Желая добавить любой из упомянутых выше в файл с чем-то вроде:
set filesResult to get (result_file of (get item 1 of theMatches)) as text
set theMessage to get (message of (get item 1 of theMatches)) as text
set combined to filesResult & ":" & theMessage
Я вспомнил возможность использования буфера обмена и нашел переменную Set clipboard в переменной Applescript? поэтому я добавил:
set filesResult to the clipboard
make new text document
paste
но моя проблема, с которой я сталкиваюсь, состоит в том, как я могу взять каждый пункт в списке found_matches
и добавить в буфер обмена элемент в каждой строке? Я думал об использовании repeat
но я получаю ошибку при попытке:
repeat with x from 1 to (length of matchesItems)
set filesResult to get (result_file of (get item x of theMatches)) as text
set theMessage to get (message of (get item x of theMatches)) as text
set combined to filesResult & ":" & theMessage
end repeat
С сообщением:
Переменная matchItems не определена.
Итак, как я могу получить каждый элемент из списка в буфер обмена с каждым элементом в отдельной строке, чтобы я мог вставить все элементы из буфера обмена в новый файл?
1 ответ
Уточнить формулировку
theList = {A,B,C} -- this is a list with 3 variables
theRecord = {A:something, B:somethingElse, C:somethingElseTwo} -- this is a record.
Список можно адресовать по его индексу.
theList's item 1 -- A
К записи можно обращаться по ее ключам
A of theRecord -- something
Чтобы получить все элементы списка в строку, повторите его по индексу (говоря, что каждый элемент имеет тип text)
set finalString to ""
repeat with thisItem in TheList
set finalString to finalString & thisItem & return -- the return creates a new line
end repeat
Тогда у вас есть finalString для всего, что вам нравится.
Чтобы получить каждый элемент записи, вы должны знать его ключи (если это не ASOC NSDictionary)
set finalString to ""
set finalString to finalString & A of theRecord & return;
-- repeat last line with every key