Applescript无法提取带有超链接的RTF文件

时间:2019-01-10 14:37:58

标签: applescript macos-sierra

我正在尝试从具有450多个rtf文件的文件夹中提取超链接和常规文本。每个文件具有相同的结构。

我正在使用以下Applescript,该AppleScript可以正常运行,并且可以在结果窗口中正确解码文件。

但是我收到此错误,但我不够熟练,无法纠正它。

  

错误“-[NSURL writeToURL:atomically:encoding:error:]:无法识别   选择器发送到实例0x7fa6f527c7f0“号-10000

这是我在互联网上找到的脚本:

use AppleScript version "2.4" -- Yosemite (10.10) or later

use framework "Foundation"

use framework "AppKit"

use scripting additions

set theFolder to choose folder -- choose the folder containing the .rtf files

tell application id "com.apple.finder" -- Finder

    set theFiles to every file of theFolder as alias list

end tell

repeat with aFile in theFiles

    if (aFile as text) ends with ".rtf" then

        set theURL to (current application's NSURL's fileURLWithPath:(POSIX path of aFile))

        set {attString, theError} to (current application's NSAttributedString's alloc()'s initWithURL:theURL options:(missing value) documentAttributes:(missing value) |error|:(reference))

        -- get elngth so we can start from the end
        set start to (attString's |length|()) - 1

        -- make plain string copy to work on
        set theString to attString's |string|()'s mutableCopy()
        repeat
            -- find link

            set {aURL, theRange} to (attString's attribute:(current application's NSLinkAttributeName) atIndex:start effectiveRange:(reference))

            if aURL is not missing value then
                -- get linked text
                set linkText to (theString's substringWithRange:theRange)
                if (aURL's |scheme|()'s isEqualToString:"mailto") then -- email address

                    set newLink to aURL's resourceSpecifier()

                else if (linkText's containsString:"This Site") then -- resource specifier, remove //

                    set newLink to (aURL's resourceSpecifier()'s substringFromIndex:2)

                else -- full URL

                    set newLink to aURL's absoluteString()
                end if

                -- replace link
                (theString's replaceCharactersInRange:theRange withString:newLink)

            end if

            set start to (location of theRange) - 2

            if start < 0 then exit repeat

        end repeat

        set newFile to (theURL's URLByDeletingPathExtension()'s URLByAppendingPathExtension:"text")

        (newFile's writeToURL:theURL atomically:true encoding:(current application's NSUTF8StringEncoding) |error|:(missing value))

    end if

end repeat

任何帮助将不胜感激。

这是文件夹中每个文件的结构几乎相同:

  

此网站(带有超链接)

     

提交日期

     

2018年12月12日

     

通知日期

     

2019年10月1日

     

活动日期

     

2019年10月25日

     

跟踪号码

     

SIFF4964

    Email  (with Hyperlink)

    Website  (Hyperlink)

我希望得到一个纯文本文件

  

Site.com

     

提交日期

     

2018年12月12日

     

通知日期

     

2019年10月1日

     

活动日期

     

2019年10月25日

     

跟踪号码

     

SIFF4964

     

address@site.com

     

site.com

谢谢

1 个答案:

答案 0 :(得分:1)

该错误明确指出writeToURL:atomically:encoding:error不属于NSURL

这只是一个错字,您想将替换后的字符串写到磁盘,而不是URL

(theString's writeToURL:newFile atomically:true encoding:(current application's NSUTF8StringEncoding) |error|:(missing value))

PS:请不要忘了,Shane在MacScripter上为您做了很多工作