2010-01-04 14 views
5

Al intentar cargar el archivo XML/plist de iTunes, obtengo el "desbordamiento de la tabla interna". Después de buscar en Google, parece que Applescript se ha quedado sin memoria. El archivo tiene 18 megas en el disco, por lo que, si bien es cierto, debería funcionar en una Mac con 2 gigas.Cómo resolver el "desbordamiento de la tabla interna" en Applescript

¿Cómo puedo resolver esto?

Obviamente, dado que es creado por iTunes, no puedo controlar la generación de mucho.

Actualización: El fragmento relevante:

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 
+0

Es difícil decir cuál es el problema sin saber qué método está utilizando para intentar cargar el archivo. ¿Podría publicar el código que está utilizando para cargar el archivo XML? –

+0

Claro. Voy a actualizar. – Bill

Respuesta

2

supongo que AppleScript simplemente no se hace para manejar esta cantidad de datos. Traté de utilizar AppleScript hace un tiempo e intenté hacer algo similar (leer una biblioteca de iTunes). La intención original de AppleScript era automatizar las aplicaciones enviándoles AppleEvents, lo que, combinado con la extraña sintaxis de AppleScript, confunde mucho y hace que sea difícil hacer muchas cosas simples.

Después de un tiempo frustrante que decidí usar Python en su lugar, ya que proporciona un módulo simple para leer los archivos plist: http://docs.python.org/dev/library/plistlib.html

Posiblemente no

lo que quería escuchar, pero el problema con AppleScript es que es fácil sobrecargado de datos, ya que la abstracción de los datos con los que trabaja es bastante voluminosa y ocupa mucha memoria.

Estoy seguro de que si le das una oportunidad a Python, tendrás algo listo y funcionando en menos de una hora. Python está instalado en todas las Mac de forma predeterminada y es realmente fácil de aprender.

+0

Además, si necesita hacer lo que AppleScript hace, puede usar el módulo de aplicaciones de Python (http://appscript.sourceforge.net/) para hacer las mismas cosas desde Python; No he usado la versión de Python, pero he usado la versión de Ruby, y es bastante buena. –

+0

Gracias. Si nadie puede realmente responder cómo hacerlo de esta manera, voy a ver cómo cambiar a Python como Plan B. – Bill

1

versión del sistema operativo 10.6.8

Actualización: La confirmación de la validez
Después de escribir el siguiente principio traté de revertir el código a mano, pero no pudo reproducir el error y escondí el cargo por "borrar" se .
Ahora el error ocurrió al cargar una ruta de acceso de archivo inexistente y una existente en una secuencia de comandos de análisis de opciones cargada con una llamada load script, inicialmente manejada por el controlador de ejecución, llamado por el programa CLI osascript (1). Esta vez es reversible y me siento seguro de poder "borrarlo".

En resumen, mi solución es cambiar anyone_else's POSIX file path_posix a AppleScript's POSIX file path_posix

alguna relación
Después de escribir el siguiente ahora me doy cuenta de que lo primero, sólo vi "iTunes" y se perdió la primera línea relevante con tell app "system events" y la uso de property list file que quizás/de hecho/de alguna manera podría estar relacionado con mi problema con info for a POSIX file.
Una nota relacionada con OP/pregunta: el archivo o alias as string proporciona una ruta "HFS" separada por dos puntos. System Events maneja ambos.

Mi problema
En un guión guión de carga i tiene error "Internal table overflow." number -2707 desde el bloque de abajo.
Se emitió cuando llamé al controlador del bloque usando ~ IPC ~ (app app_name's handler_name()) (cuando lo investigué más a fondo, lo había encontrado antes, sin 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 

A (la (?)) Padre (utilizado para my) de este guión, vale la pena mencionar, es current application (con algunos niveles intermedios) (compilado y empaquetado en "Editor AppleScript" para ser ejecutado como .app autónomo)

Mi solución
Cambio

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

a

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

resolvió el problema - por ahora.

Pensamientos
Supongo diferentes módulos ~ ~ tiene diferentes "mesas" (no hacer ahora mucho C) para el manejo de una cosa como POSIX file y info for (Open "Scripting Addition"/extensión (OSAX) " Adiciones estándar ", ya que (ambas) todavía están, ¿no es así?).

Espero que esto ayude, y que mi nivel de detalle (y paréntesis) no te haya perdido ni confundido :) Buenas noches.

Diggin' 'alrededor de las cunas
Alrededor de la memoria grave como: (prevenir el uso abusivo me hizo Downgrade todos menos 2 enlaces - Dame un poco de representante y lo arreglaré: p.)
• El eminente ~ tiene [en este código de error] (http://lists.apple.com/archives/applescript-users/2005/Jul/msg00166.html) con una fuente relacionada, pero tal vez diferente (y mencionando su cargador de biblioteca) a través de la lista. apple.com.
• Algunos [buenos interrogatorios] (http://lists.apple.com/archives/applescript-implementors/2005/Jun/msg00104.html), algunos de los cuales pueden ser una respuesta levemente abierta:
• cs .cmu.edu proporciona (120625) un pascal source from 1992 que define los mismos límites que mi local /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/Headers/AppleScript.h
• Y, por último, un tema relacionado más distante [con grandes scripts] (http://macscripter.net/viewtopic.php?id=11760) desde macscripter.net - un buen foro de conocimiento y recopilación de recursos en torno a applescript.

Cuestiones relacionadas