2015-05-01 2 views
0

Я пытаюсь создать задачу Automator, которая использует AppleScript для форматирования номера телефона в формат (XXX не) XXX-XXXXформатирование телефоны в Applescript

on clean_number(phoneNumber) 
    set newString to {} 
    repeat with c in the characters of phoneNumber 
     set c to c as text 
     if c is not "-" then 
      if c is not " " then 
       set the end of newString to c 
      end if 
     end if 
    end repeat 
    return newString 
end clean_number 

on run {input, parameters} 
    set originalText to clean_number(input) as string 
    if length of originalText is 10 then 
     set areaCode to items 1 thru 3 of originalText as string 
     set localExchange to items 4 thru 6 of originalText as string 
     set phoneNumber to items 7 thru end of originalText as string 
     set result to "(" & areaCode & ")" & localExchange & "-" & phoneNumber as string 
     return result 
    end if 
end run 

, когда я запускаю это я получаю никакого результата. Я проверил функцию запуска отдельно, и он работает. Проблема, которую я получаю, кажется, повторяется, потому что, когда я пытаюсь вернуть c изнутри повтора, я не получаю результата

Редактировать: Как рекомендовал iayork, я попытался запустить скрипт через терминал, и он сработал! Это означает, что проблема лежит где-то в том, как Automator обрабатывает сценарий.

ответ

0

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

set originalText to clean_number(input) as string 

(который отлично работает с редактором скриптов) для

set originalText to clean_number(item 1 of input) as string 

Я не знаю, как вы вызываете ваши действия Automator; Я использовал «Получить содержимое буфера обмена» и «Копировать в буфер обмена», чтобы проверить это.

Оригинальный ответ: Ваш скрипт работает для меня. Я подозреваю, что номер вводимого телефона вводится таким образом, что «длина» не равна 10; например, с запятой или с параметрами, получаемыми в сочетании с входом.

Если запустить

osascript test.scpt 1234567890 parameters 

вы должны быть в состоянии подтвердить, что сам скрипт работает. Если это все еще проблема, проверьте, что именно Automator передает сценарию (я не знаю, хочет ли Automator добавить некоторые параметры, но если нет, вы можете исключить это из секции «Запуск» для простоты).

+0

Даже когда я возвращаю значение, которое pure_number дает мне, я не получаю результата до утверждения if. Вход передается правильно, потому что когда я делаю оператор clean_number, просто возвращаю номер телефона, скрипт работает. –

+0

Вы вызываете скрипт через osascript? Что произойдет, если вы попросите только «ввод», прежде чем что-нибудь случится? – iayork

+0

Хм, когда я запускаю его так, как вы показали, он работает, я не уверен, что делает automator, я удалил параметры, как вы сказали, но он все равно ничего не возвращает –

0

Я вставил оператор журнала в обработчик запуска, поэтому я мог получить некоторый результат от Console.app (все сообщения) относительно того, что произошло при запуске службы, я сначала нажал кнопку воспроизведения службы, а затем Automator сказал мне, что мне пришлось вставить действие «Получить заданный текст», чтобы у него было что-то работать во время сухих пробегов. Я также добавил набор номер телефона в номер телефона как текст внутри обработчика форматирования. -Я также использовал res, вместо того, чтобы назначать результат, потому что я не знаком с этим. Во всяком случае, я получил (XXX) XXX-XXXX, когда я использовал в качестве входного сигнала (XXX) XXX-XXXX.

on run {input, parameters} 
    set originalText to clean_number(input) as string 
    log "here: " & originalText 
    if length of originalText is 10 then 
     set areaCode to items 1 thru 3 of originalText as string 
     set localExchange to items 4 thru 6 of originalText as string 
     set phoneNumber to items 7 thru end of originalText as string 
     set res to "(" & areaCode & ")" & localExchange & "-" & phoneNumber as string 
     log res 
     return res 
    end if 
end run 

on clean_number(phoneNumber) 
    set phoneNumber to phoneNumber as text 
    set newString to {} 
    repeat with c in the characters of phoneNumber 
     set c to c as text 
     if c is not "-" then 
      if c is not " " then 
       set the end of newString to c 
      end if 
     end if 
    end repeat 
    return newString 
end clean_number 
+0

См. Мой обновленный ответ. Automator передает входные данные в виде списка, поэтому вам нужно работать с пунктом 1 ввода – iayork

+0

Я просто принудил параметр обработчика номера телефона к тексту. – McUsr

+0

Кажется немного рискованным. – iayork

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