IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

Ambiguité et mélange de types


Sujet :

AppleScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 32
    Points : 37
    Points
    37
    Par défaut Ambiguité et mélange de types
    J'ai un bout de programme qui doit faire sélectionner à l'utilisateur un item dans une liste préétablie et calculée avant et qui s'appelle liste_Video. Elle l'assigne dans la variable "Choix", ce qui est le sens de la 1ère instruction.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set Choix to choose from list liste_Video with prompt "Choose a video"
    		if (result = "false") then
    			return
    		else
    			set myFIle to (select file Choix of folder Database_VIdeo)
    			tell application "QuickTime Player" to open myFIle
    			close the front Finder window
    		end if
    	on error errMsg number errNum
    		display dialog "Number = " & errNum & "Errmsg= " & errMsg
    J'ai vérifié et toutes les variables sont correctement renseignées, valeur et déclaration en string ou liste.

    Le problème est que lorsque je fais tourner cette portion de programme puis sélectionne une video Anna.mp4, il me renvoie un message "error -1700. Errmsg= Finder got an error: Can't make {"Anna.mp4"} into type integer"
    Bien entendu "Anna.mp4" est la string dans la liste que j'ai sélectionnée.
    Lorsque je remplace Choix -qui est bien déclarée en type string-par "Anna.mp4" en littéral, là ça marche.

    Je cherche depuis des heures mais rien à faire: comprends pas du tout pourquoi le Finder interprète qu'une chaine en string doit être convertie en type integer ce qui fait planter le programme. Alors que visiblement dans la syntaxe il attend une string.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,
    Tout d'abord tu fais une erreur de type : en effet, la variable Choix n'est pas une string, mais une liste à l'issue de l'instruction "choose from list".
    Cela d'ailleurs pourrait très bien être un choix multiple de l'utilisateur (avec le paramètre "multiple selection allowed").

    Donc il faudrait récupérer la string sous la forme : Set MyFile to item 1 of Choix

    Le second problème est que la valeur que tu indiques "Anna.mp4" peut être une string, mais pas forcément un fichier.
    Ton affectation dans le dossier Database_Video pourrait être correcte en recréant le chemin complet.
    Enfin, il faudrait demander à QuickTime, non pas d'ouvrir une string, mais un fichier.

    Rassure toi, les erreurs de type (string, alias, ...) sont très courantes en Applescript.
    Ceci est du au fait que le compilateur est trop gentil ! Quand il n'y a pas de doute, il accepte des erreurs de typage et il les corrige en interne sans te le dire. Tu crois donc que ton code est OK (et il tourne) mais il comporte une ou plusieurs ambiguïtés.
    Des languages plus structurants, qui rendent les déclarations de type obligatoires sont , en ce sens, plus clairs (rigides parfois à l'extrême, certes, mais clairs et sans ambiguïtés).

    Voici donc un script qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set Database_Video to (path to desktop folder) as string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set Liste_Video to {"Fichier 1", "Fichier 2", "Fichier 3", "Anna.mp4", "Fichier 4"}
    
    set Choix to choose from list Liste_Video with prompt "Choose a video"
    if (result = "false") then
        return
    else
        set myFIle to Database_Video & (item 1 of Choix)
        tell application "QuickTime Player" to open file myFIle
    end if


    Cordialement

    PS : désolé, mais je ne sais pourquoi mais une balise code s'obstine à venir s'insérer (ce site a parfois des bugs !). Il faut bien sûr mettre les 2 morceaux de codes ensemble !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Merci de ton aide . Malheureusement quand je fais tourner ton script j'obtiens un display error qui dit:
    Number -10010. Errmsg= Finder got an error: Handler can't handle objects of this class

    J'aurais bien aimé que ça marche en vérité car ça fait des heures et bientôt des jours que je suis sur ce bug.
    Ceci dit ton observation fait sens indéniablement.
    L'erreur (de ma part!) semble bien être en vérité sur l'instruction:

    set myFIle to (select file Choix of folder Database_VIdeo)

    Quand je fais:
    display dialog "Choix= " & Choix
    ...il semble bien que ce soit une string .

    Ça marche en litttéral alors je comprends pas du tout pourquoi Finder m'affiche qu'il doit le convertir en integer. Mystère.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Je confirme que Choix est bien un type liste.
    Le fait que le compilateur accepte ton "display dialog choix" est bien parce que Applescript est souple et, dans le cas d'une liste à un seul élément, il accepte de l'interpréter comme string.

    Ceci étant, à quelle ligne exactement intervient ton erreur dans le script ?
    Quelles sont alors les valeurs de Database_Video et de Choix ?
    Le script ne fait pas de test d'existence, car j'ai supposé que les fichiers de la liste existent bien dans le dossier Database_Video. Si ton fichier n'existe pas à cet endroit, alors l'erreur est inévitable !

    Cordialement

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Effectivement il a fait figurer une erreur un moment: Impossible d'ouvrir le fichier {"Anna.mp4"}, ce qui laisse bien supposer que c'est une liste. Ça marche, victoire. Merci mon ami.

    Le script correct est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    set Choix to choose from list liste_Video with prompt "Choose a video"
    		if (result = "false") then
    			return
    		else
    			set myFIle to (select file (item 1 of Choix) of folder Database_VIdeo)
    			open myFIle
    			close the front Finder window
    		end if
    	on error errMsg number errNum
    		display dialog "Number = " & errNum & " ; Errmsg= " & errMsg
    	end try
    J'ai plus qu'à me préoccuper de l'Interface graphique Xcode en Cocoa et Objective_C pour intégrer les programmes en Applescript que j'ai écrit et qui marche (merci de ton aide): autre paire de manche. J'ai déjà réalisé une petite interface, pas super élégante mais en tout cas l'ossature de l'interface finale de ce que je veux faire.
    Miracle !! Il y a des tutoriels pour lancer des exécutables Applescript depuis ce genre d'interface en utilisant une classe qui doit s'appeler NSApplescript.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème le type dict: mélange de mes données
    Par SpaceMonkey dans le forum Général Python
    Réponses: 3
    Dernier message: 12/09/2009, 19h43
  2. Réponses: 1
    Dernier message: 12/05/2009, 22h20
  3. Résoudre ambiguité de signature sur type valeur (C++ managed)
    Par pierre.chatelier dans le forum Framework .NET
    Réponses: 1
    Dernier message: 21/12/2008, 21h18
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo