2016-06-26 3 views
2

В VBA, его чрезвычайно легко заменить подстроки с помощью другой подстроки, например, objMsg.Body = Replace(objMsg.Body, "<Month\", Format(dtDate1, "mmmm")), который заменяет "<Month>" текущим месяцем в теле письма. Я уже встречал вопросы, подобные этому, но им уже несколько лет и, как правило, сумасшедшие обходные пути, которые почти не стоят моего времени.Имеет ли AppleScript функцию замены?

ответ

2

Нет, но вы можете использовать это (source):

on replace_chars(this_text, search_string, replacement_string) 
set AppleScript's text item delimiters to the search_string 
set the item_list to every text item of this_text 
set AppleScript's text item delimiters to the replacement_string 
set this_text to the item_list as string 
set AppleScript's text item delimiters to "" 
return this_text 
end replace_chars 

использование:

replace_chars(message_string, "string_to_be_replaced", "replacement_string") 

(кстати, вы можете в настоящее время также использовать JavaScript вместо AppleScript, поиск «JavaScript для OS X Automation ")

+0

Слава богу. Я не могу выдержать этот код. – potapeno

+0

++, но в интересах надежности лучше сохранить и восстановить исходное значение «разделитель текстовых элементов». – mklement0

+1

@potapeno: до тех пор, пока вы знаете, как работает эта функция (случайная INsensitive замена всех вхождений, обертывание вызовов в блоке 'рассматриваемый случай ... конец рассмотрения' для соответствия case-SENSITIVE), вам не нужно понимать Это. Тем не менее, принципиально переключение на [JXA (JavaScript for Automation)] (https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html#//apple_ref/doc/uid/TP40014508-CH109-SW1), доступный с 10.10, может сделать вас счастливее, хотя кажется, что это только немного менее нежелательный паскворд, чем AppleScript – mklement0

1

Один действительно простой способ найти/заменить - вызвать сценарий оболочки и передать в него текст в виде строки:

set inputText to "My name is Fred." 
set findText to "Fred" 
set replaceText to "Sally" 

set newText to do shell script "sed 's|" & quoted form of findText & "|" & quoted form of replaceText & "|g' <<< " & quoted form of inputText 
+0

Btw 'replaceText' также должен быть безопасным Regex, поэтому нет" " –

Смежные вопросы