在Applescript中格式化电话号码

时间:2015-05-01 13:36:04

标签: applescript number-formatting phone-number automator

我正在尝试创建一个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处理脚本的方式中。

2 个答案:

答案 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