我正在尝试创建一个Automator任务,该任务使用applescript将电话号码格式化为格式(XXX)XXX-XXXX
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
当我跑步时,我得不到任何结果。我已经单独测试了run函数并且它有效。我得到的问题似乎在重复,因为当我尝试从重复内部返回c时,我得不到结果
编辑: 正如iayork推荐的那样,我尝试通过终端运行脚本,并且它有效!这意味着问题出在Automator处理脚本的方式中。
答案 0 :(得分: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是否想要添加一些参数,但如果没有,您可以从运行中删除该部分以简化)
答案 1 :(得分:0)
我在运行处理程序中插入了一条日志语句,所以我可以通过 Console.app (所有消息)得到一些关于运行服务时发生的事情的输出,我确实打了一下首先是服务按钮,然后Automator告诉我,我必须插入一个“获取指定文本”动作,以便在干运行期间有一些工作。我还在phoneNumber中添加了一个set phoneNumber作为格式化处理程序中的文本。 - 我也使用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