2010-01-04 8 views
5

Lorsque vous tentez de charger le fichier iTunes XML/plist, j'obtiens "débordement de table interne". Après Google, il semble que Applescript n'a plus de mémoire. Le fichier est de 18 méga-octets sur le disque, alors que sur le plus gros plan, il devrait encore fonctionner sur un Mac avec 2 concerts.Comment faire pour résoudre "débordement de table interne" dans Applescript

Comment puis-je résoudre ce problème?

De toute évidence, depuis qu'il est créé par iTunes, je ne peux pas contrôler la génération de beaucoup.

Mise à jour: L'extrait pertinent:

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

Il est difficile de dire quel est le problème sans connaître la méthode que vous utilisez pour essayer de charger le fichier. Pourriez-vous poster le code que vous utilisez pour charger le fichier XML? –

+0

Bien sûr. Je vais mettre à jour. – Bill

Répondre

2

Je suppose que AppleScript est tout simplement pas fait pour gérer cette quantité de données. J'ai essayé d'utiliser AppleScript il y a longtemps et j'ai essayé de faire quelque chose de similaire (lire une bibliothèque iTunes). L'intention initiale d'AppleScript était d'automatiser les applications en leur envoyant AppleEvents - ce qui, en combinaison avec la syntaxe bizarre d'AppleScript, crée beaucoup de confusion et rend difficile la réalisation de choses simples.

Après un certain temps frustrant j'ai décidé d'utiliser Python à la place, car il fournit un module simple pour lire les fichiers plist: http://docs.python.org/dev/library/plistlib.html

Peut-être pas ce que vous vouliez entendre, mais le problème avec AppleScript est qu'il est facilement surchargé de données, car l'abstraction des données avec lesquelles il travaille est plutôt volumineuse et prend beaucoup de mémoire.

Je suis sûr que si vous essayez Python, vous aurez quelque chose de opérationnel en moins d'une heure. Python est installé sur tous les Mac par défaut et est vraiment facile à apprendre.

+0

De plus, si vous avez besoin de faire ce qu'AppleScript fait, vous pouvez utiliser le script appscript du module Python (http://appscript.sourceforge.net/) pour faire les mêmes choses à partir de Python; Je n'ai pas utilisé la version Python, mais j'ai utilisé la version Ruby, et c'est plutôt bon. –

+0

Merci. Si personne ne peut vraiment répondre comment faire de cette façon, je vais jeter un oeil à Python en tant que Plan B. – Bill

1

version OS 10.6.8

Mise à jour: Confirmation de validité
Après avoir écrit d'abord le dessous j'ai essayé de revenir le code à portée de main mais ne pouvait pas reproduire l'erreur et cachais le message par « suppression » il .
L'erreur est maintenant survenue lors du chargement d'un chemin de fichier inexistant et d'un existant dans un script d'analyse d'options chargé d'un appel load script, initialement géré par run handler, appelé par le programme CLI osascript (1). Cette fois, il est réversible et je me sens confiant de ne pas le "supprimer".

En bref, ma solution est de changer anyone_else's POSIX file path_posix à AppleScript's POSIX file path_posix

une relation
Après avoir écrit le ci-dessous je me rends compte maintenant que j'ai seulement vu « iTunes » et a raté la première ligne concernée avec tell app "system events" et l'utilisation de c'est property list file qui peut-être/réellement/en quelque sorte pourrait être liée à mon problème avec info for un POSIX file.
Une note liée à OP/question: le fichier ou l'alias as string donne un chemin "HFS" séparé par deux-points. Les événements système traitent les deux.

Ma question
Dans un script-chargement i obtenu error "Internal table overflow." number -2707 du bloc ci-dessous.
Il a été émis quand j'ai appelé le gestionnaire du bloc en utilisant ~ IPC ~ (app app_name's handler_name()) (quand je l'ai étudié plus en profondeur, mais je l'avais rencontré avant - sans 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 (le (?)) Parent (utilisé pour my) de ce script, de mentionner, est current application (avec quelques niveaux entre les deux) (compilé et fourni dans "AppleScript Editor" pour être exécuté comme .app autonome)

Ma solution
Changer

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 

a résolu le problème - pour l'instant.

Pensées
Je devine différents modules ~ ~ a différentes "tables" (ne pas maintenant beaucoup C) pour traiter une chose comme POSIX file et info for (ouvrir "Scripting Addition"/extension (OSAX) " Standard Additions ", comme il est toujours le cas, n'est-ce pas?).

Espérons que cela aide, et que mon niveau de détail (et mes parenthèses) ne vous a pas lâché ou vous déroute :) Bonne nuit.

Diggin' « autour des berceaux
autour de la tombe de mémoire: (prévention du spam m'a fait downgrade tous, mais 2 liens hypertextes - me donner quelques rep et je vais le corriger: p.)
• L'éminent ~ a [sur ce code d'erreur] (http://lists.apple.com/archives/applescript-users/2005/Jul/msg00166.html) avec une source liée mais peut-être autre (et mentionnant son chargeur de bibliothèque) via la liste. apple.com.
• Quelques [bonnes questions] (http://lists.apple.com/archives/applescript-implementors/2005/Jun/msg00104.html), dont la réponse ci-dessous peut être légèrement béante:
• cs .cmu.edu fournit (120625) un pascal source from 1992 qui définit les mêmes limites que mon local /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/Headers/AppleScript.h
• Et enfin un [problème avec de grands scripts] plus éloignés (http://macscripter.net/viewtopic.php?id=11760) de macscripter.net - un bon forum de connaissances et de collecte de ressources autour d'applescript.

Questions connexes