Как использовать разделители текстовых элементов Applescript, игнорируя указанный символ c - PullRequest
0 голосов
/ 04 апреля 2020

Я бы хотел отделить каждый URL в текстовом списке запятой в приложении Applescript. Пример ввода:

alloresto.fr eat.ch eatnow.com.au just-eat.ca just-eat.co.uk

Использование текста Applescript разделители предметов, я получаю частичный успех:

set enterDomains to myTextField's stringValue() as text -- gets text from text field in my xib window

set AppleScript's text item delimiters to ", "
set theResults to every word of enterDomains as string
set AppleScript's text item delimiters to ""

alloresto.fr, eat.ch, eatnow.com.au, просто, eat.ca, просто, eat.co.uk

Но это разбивает каждый домен с - в нем, поскольку у меня установлено every word. Можно ли игнорировать символ - при использовании разделителей текстовых элементов Applescript?

Я знаю, что моя проблема связана с every word of enterDomains, поскольку в доменах с переносами содержится более одного слова, но когда я изменяю эту строку на что-то вроде text of enterDomains, он возвращает мне тот же список доменов в результате без каких-либо добавленных запятых.

Идеи или предложения?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

words of... против text items of...

words of... функционирует независимо от text item delimiters, поэтому всегда будет разбивать строку одинаково.

text item delimiters позволяет указать одну или несколько фраз для разделения строки на список text items. Он также определяет, как список text items объединяется вместе, поэтому будет иметь значение в любом случае, когда объект list приводится в объект text (или string).

Чтобы разбить строку при каждом появлении пробела и только пробела:

set enterDomains to "alloresto.fr eat.ch eatnow.com.au just-eat.ca just-eat.co.uk"
set my text item delimiters to space
set theResults to text items in enterDomains
    --> {"alloresto.fr eat.ch", "eatnow.com.au just-eat.ca", "just-eat.co.uk"}

Затем, чтобы объединить этот список text items в строку, ограниченную запятая:

# ...Cont'd from the previous code block

set my text item delimiters to ", "
return theResults as text
    --> "alloresto.fr eat.ch, eatnow.com.au just-eat.ca, just-eat.co.uk"

text item delimiters в более общем смысле

Как я уже говорил выше, text item delimiters может фактически быть установлен в список из нескольких элементов, вместо только одного символа или фразы. Это приводит к разделению строки при каждом появлении каждого элемента в указанном вами списке text item delimiters, например,

set input to "The quick brown fox jumps over the lazy dog."
set my text item delimiters to {"i", space, "fox"}
get the text items of the input
    --> {"The", "qu", "ck", "brown", "", "", "jumps", "over", "the", "lazy", "dog."}

Порядок разделителей здесь не имеет значения, поскольку строка будет разделена с использованием каждого разделитель действует одновременно.

Однако, при объединении list обратно в text объект, только первый разделитель используется для склеивания text items вместе , В этом случае это будет "i":

# ...Cont'd from the previous code block
# result: {"The", "qu", "ck", "brown", "", "", "jumps", "over", "the", "lazy", "dog."}

return the result as text
    --> "Theiquickibrowniiijumpsioveritheilazyidog."

Обратите внимание, что при разбиении строки каждое вхождение разделителя удаляется из строки; когда он соединяется, первый разделитель вставляется только между каждым фрагментом текста. Это фактически замена битов текста чем-то другим.

Замена текста с использованием text item delimiters (введение)

В вашем конкретном случае c ваша задача может суммировать как необходимость заменить пробелы в вашей строке запятыми. Таким образом, мы можем сделать это за один ход, установив text item delimiters таким образом, чтобы символы пробела удалялись, а ", " вставлялось во время конкатенации:

set enterDomains to "alloresto.fr eat.ch eatnow.com.au just-eat.ca just-eat.co.uk"
set my text item delimiters to {", ", space}
return the text items of enterDomains as text
    --> "alloresto.fr eat.ch, eatnow.com.au just-eat.ca, just-eat.co.uk"

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


AppleScript-Obj C

... потому что я видел, как вы используете stringValue() и ссылаясь на окно .xib, я быстро предоставлю вам эквивалент AppleScriptObj C для некоторых из указанных выше сценариев ios.

Как я уверен, вы знаете, все примеры будут работать только в том случае, если скрипт, в котором они появляются, имеет следующие исходные строки кода:

use framework "Foundation"
# use scripting additions -- if Standard Additions are needed

property this : a reference to the current application
property NSArray : a reference to NSArray of this
property NSString : a reference to NSString of this

Я буду использовать объявление-назначение для enterDomains в вашем коде в качестве отправной точки, но вместо того, чтобы приводить его к text, я оставлю его как объект ссылки на какао, возвращенный stringValue() (-- комментирует приведение):

set enterDomains to myTextField's stringValue() -- as text

Следовательно, enterDomains теперь содержит экземпляр объекта значения класса NSString. Итак:

  1. Разделение строки:

    set theResults to enterDomains's componentsSeparatedByString:space
    
  2. Присоединение к списку строк:

    theResults's componentsJoinedByString:", "
    
  3. Замена каждого пробела запятой:

    my TextField's stringValue()'s stringByReplacingOccurrencesOfString:space withString:", "
    return the result as text
    

См. Документацию Apple по классу NSString для больше вещей.

0 голосов
/ 04 апреля 2020

Рассмотрим этот пример:

set s to "alloresto.fr eat.ch eatnow.com.au just-eat.ca just-eat.co.uk"
set AppleScript's text item delimiters to " "
set theResults to every text item of s
-- {"alloresto.fr", "eat.ch", "eatnow.com.au", "just-eat.ca", "just-eat.co.uk"}
set AppleScript's text item delimiters to ""

Go вы и поступите так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...