如何解决Applescript中的“内部表溢出”

时间:2010-01-04 03:38:23

标签: applescript

尝试加载iTunes XML / plist文件时,出现“内部表溢出”。在谷歌搜索之后,看起来Applescript的内存不足。该文件在磁盘上是18兆,因此虽然在较大的一面,它应该仍然适用于2台演出的Mac。

我该如何解决这个问题?

显然,由于它是由iTunes创建的,我无法控制它的产生。

更新:相关代码段:

tell application "System Events"
    tell property list file (itunes_xml_file as string)
        tell contents
            set my_tracks to value of property list item "Tracks"
            repeat with t in items of my_tracks

2 个答案:

答案 0 :(得分:2)

我猜AppleScript根本就没有处理这么多数据。我曾尝试过使用AppleScript,并尝试做类似的事情(阅读iTunes资料库)。 AppleScript的初衷是通过向他们发送AppleEvents来自动化应用程序 - 这与AppleScript的奇怪语法相结合,会让人感到困惑,并且很难做很多简单的事情。

经过一段令人沮丧的时间之后,我决定使用Python,因为它提供了一个简单的模块来读取plist文件:http://docs.python.org/dev/library/plistlib.html

可能不是你想听到的,但AppleScript的问题在于它很容易因数据而过载,因为它使用的数据抽象相当庞大并占用大量内存。

我敢肯定,如果你试试Python,你将在不到一个小时的时间内完成并运行。默认情况下,Python安装在所有Mac上,非常容易学习。

答案 1 :(得分:1)

操作系统版本10.6.8

更新:确认有效期
在最初写下面之后,我试图恢复手头的代码,但无法重现错误并通过“删除”来隐藏帖子。
刚刚在加载了load script调用的选项解析脚本中加载一个不存在的和一个存在的文件路径时发生错误,最初由运行处理程序处理,由CLI osascript(1)程序调用。这一次它是可以恢复的,我有信心取消“删除”它。

简而言之,我的解决方案是将anyone_else's POSIX file path_posix更改为AppleScript's POSIX file path_posix

某种关系
写完下面后,我现在意识到我第一次只看到“iTunes”而错过了与tell app "system events"相关的第一行并且使用了property list file这可能/实际上/某种程度上可能与我的问题有关info for POSIX file 与OP / question:file或别名as string相关的注释给出了冒号分隔的“HFS”路径。系统事件处理两者。

我的问题
在脚本加载脚本中,我从下面的块中获得error "Internal table overflow." number -2707 它是在我使用~IPC~(app app_name's handler_name())调用块的处理程序时发出的(当我更彻底地调查它时,我之前遇到过它 - 没有IPC)。

try
    set file_modified_date to (info for my POSIX file file_path_posix)'s modification date
    true
on error error_message number error_number from error_source partial result error_result to error_class
    if {error_number} is not in {-43, -37} then error error_message number error_number from error_source partial result error_result to error_class
    false
end try

这个脚本的一个( (?))父(用于my),值得一提,是current application(中间有一些级别)(编译和捆绑在“AppleScript编辑器”中作为独立的.app运行

我的解决方案
改变

set file_modified_date to (info for my POSIX file file_path_posix)'s modification date

set file_modified_date to (info for AppleScript's POSIX file file_path_posix)'s modification date

解决了这个问题 - 现在。

<强>思想
我猜不同的〜模块〜有不同的“表格”(现在不用太多C)来处理像POSIX fileinfo for这样的东西(打开“脚本添加”/扩展名(OSAX)“标准添加“,因为它(两者)仍然是,它不是吗?)。

希望这会有所帮助,而且我的细节(和括号)没有松动或混淆你:)晚安。

Diggin''围绕摇篮
在AS记忆坟墓周围:(垃圾邮件预防让我降级除了2个超链接 - 给我一些代表。我会解决它:p)
•杰出的〜[有关此错误代码](http://lists.apple.com/archives/applescript-users/2005/Jul/msg00166.html)与相关但可能是其他来源(并提及他的库加载器)通过list.apple.com •一些[好问](http://lists.apple.com/archives/applescript-implementors/2005/Jun/msg00104.html),下面的一些可能是一个稍微打哈欠的答案:
•cs.cmu.edu提供(120625)一个pascal source from 1992,它定义了与我的本地/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/Headers相同的限制/AppleScript.h
•最后是来自macscripter.net的更大范围相关的[大脚本问题](http://macscripter.net/viewtopic.php?id=11760) - 一个关于AppleScript的知识和资源收集的良好论坛。 BR />