Как превратить список 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
Другие вопросы по тегам