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 :

solution de variables hors applescript ?


Sujet :

AppleScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 6
    Points
    6
    Par défaut solution de variables hors applescript ?
    Salut à tous,

    Je cherche une solution pour mémoriser des valeurs de façon permanente, ou ponctuelle et utilisable par Applescript. J'imagine des variables existantes disponibles pour tout développeur ou sinon des variables que l'on peut créer.
    Il existe bien la possibilité d'écrire un fichier texte et d'y stocker tout ce que l'on veut, mais je recherche une solution plus rapide, sans écriture. J'ai aussi une autre solution, j'utilise FileMaker pro qui est scriptable, mais c'est lourd comme système.

    Donc l'idée ce serait par ex :
    set variable to valeur
    puis get variable...
    sachant que la variable serait indépendante d'Applescript, logée quelque part dans le système… (peut-être côté terminal, avec un do shell script ?)

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    601
    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 : 601
    Points : 1 237
    Points
    1 237
    Par défaut
    Bonsoir,
    il n'y a que 2 cas possibles :
    1) C'est toujours le même script qui utilise tes variables : dans ce cas, tu peux utiliser les "property" qui conservent la dernière valeur, tant que tu ne re-compiles pas le script, cela sans écriture explicite !
    2) Cela peut être d'autres scripts et dans ce cas, il faut forcément écrire les données dans un fichier (text, data Applescript ou Plist) accessible par tous. Peu importe le format du fichier. L'emplacement prévu à cet effet est le dossier Preferences de ton dossier bibliothèque.

    Il y-t-il une raison particulière qui te fais repousser l'idée d'écrire dans un fichier ?
    C'est très simple en AS car tu peux lire et écrire tout un record d'un coup (= ensemble de variables de types variés)

    Cordialement

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par PBELL Voir le message
    Bonsoir,
    il n'y a que 2 cas possibles
    Merci PBELL pour ta réponse rapide.
    C'est un script qui va écrire, et un deuxième qui va lire. Donc solution 2.
    J'envisageais plutôt une variable, qui me semblait plus rapide d'accès. Dans tous les cas l'écriture d'un fichier sera toujours plus rapide qu'avec FileMaker.

    Plutôt qu'y passer la nuit pour trouver comment faire…(ma grande expérience de bidouilleur bordélique sur applescript me dit que je vais y passer du temps), pourrais-tu m'indiquer rapidement comment du ferais :
    écriture : une liste texte simple (mots suivis de retours) qui est définie sur FileMaker (FileMaker permet d'exécuter des Applescripts)
    et ensuite lecture.
    avec fichier écrit dans les préf de la bibliothèque par ex.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    601
    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 : 601
    Points : 1 237
    Points
    1 237
    Par défaut
    Bonsoir,
    Voici un petit script très simple qui permet la gestion des variables dans un fichier préférences.
    Je l'ai commenté pour que tu puisses l'adapter à ton besoin.
    L'important est que la variable MesPref peut contenir n'importe quelles données. Dans cet exemple, j'ai mis un texte et un compteur, mais cela peut être tout autre type de structure de données, y compris les plus complexes (des records de records !).

    Le script est découpé en sous routines creation, lecture et écriture que tu peux appeler à tout instant dans ton ou tes scripts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    global PrefFile, MesPref
    property NomPref : "com.thy06" -- le nom de ton fichier de préférence à changer selon ton besoin
    
    
    set PrefFile to ((path to preferences folderfromuser domain) as string) & NomPref
    
    
    -- lors du lancement, on vérifie si les préf existent et sinon, on les crée
    tell application "Finder"
        try
            set ExistDeja to (PrefFile exists)
        on error
            set ExistDeja to false
        end try
    end tell
    if ExistDeja then
    LitPref()
    else
    CreationPref()
    end if
    
    
    
    
    -- ton code ici qui utilise les variables de MesPref
    display dialog "Compteur=" & (monCompteur of MesPref) with title (montexte of MesPref)
    set monCompteur of MesPref to (monCompteur of MesPref) + 1 -- incrémenter le compteur avant de le sauver    
    
    
    EcritPref() -- avant de quitter, on écrit les variables pour la prochaine fois
    
    
    -- fin du programme
    
    
    
    
    -- *************************
    on CreationPref() -- routine pour initialiser les variables et créer le fichiers
    -- mettre ici l'initialisation de tes variables MesPref. Par exemple :
        set MesPref to {montexte:"ceci est un essai", monCompteur:1}
    EcritPref()
    end CreationPref
    
    
    -- *************************
    on EcritPref() -- routine d'enregistrement des variables
        try
    open for access (file PrefFile) with write permission
    write MesPref as record to (file PrefFile) starting at 0
    close access (file PrefFile)
        on error
    close access (file PrefFile)
        end try
    end EcritPref
    
    
    -- *************************
    on LitPref() -- routine de lecture des variables
        set MesPref to (read (file PrefFile) as record)
    end LitPref
    Cordialement

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Super merci.
    Une question : ça sert à quoi de déclarer des variables globales (PrefFile, MesPref)
    Et pourquoi property au lieu de set NomPref

  6. #6
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    601
    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 : 601
    Points : 1 237
    Points
    1 237
    Par défaut
    Citation Envoyé par Thy06 Voir le message
    ça sert à quoi de déclarer des variables globales (PrefFile, MesPref)
    Et pourquoi property au lieu de set NomPref
    Les variables globales peuvent être utilisées aussi bien dans le programme principal que dans les sous routines.
    Il est possible de ne pas mettre ces variables en mode global mais il faut alors les transmettre en arguments à chaque sous routine. L'écriture sera plus lourde.

    Pour NomPref, les 2 méthodes sont possibles : "set" ou "property". J'ai tendance à utiliser property pour les variables qui ne changent pas ou peu. C'est presque des constantes (bien qu'en AS on puise changer la valeur des "property").
    Aussi, par habitude, je mets les Property en tête de programme car c'est plus facile à maintenir : on voit d'un coup d'oeil toutes les valeurs a peu près fixes.

    Cordialement

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    D'accord. Il reste un problème que je rencontre.

    Quand je lance l'instruction "write" depuis l'éditeur d'applescript ou depuis Automator, ça fonctionne.
    Quand je la lance depuis FileMaker (exécuter applescript), j'obtiens une erreur :

    "fin de ligne, ect. prévu mais identificateur trouvé."
    "erreur inconnue : -2741"

    Pour quelle raison, y a-t'il une parade ?

  8. #8
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    601
    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 : 601
    Points : 1 237
    Points
    1 237
    Par défaut
    Je ne suis pas certain de comprendre ton problème.
    Je suppose que tu essay l'instruction write dans un script enregistré dans FileMaker.
    Ne travaillant pas avec FM, j'imagine qu'il dispose d'une fonction de script.
    Je ne suis pas sûr que FM utilise le language Applescript pour ses scripts...visiblement pas, sinon, il comprendrait l'instruction Write.

    Recherche de l'aide plutôt du côté des blogs spécialisés en script FileMaker....

  9. #9
    Futur Membre du Club
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    On peut exécuter un AS depuis Filemaker (qui une appli de gestion de base de données relationnelle). Ça permet de communiquer avec d'autres applis, d'exécuter des taches en dehors de Filemaker. Je fais simplement un copié collé d'un AS de l'éditeur AS vers Filemaker, j'exécute le script et j'obtiens ce message d'erreur. J'ai tourné le truc dans tous les sens, je ne trouve pas de solution. Ou si, je pense que je vais utiliser un do shell script, ça devrait fonctionner depuis Filemaker.
    PBELL, je ne vais pas te faire plancher encore sur mes problème, je te remercie grandement pour toute ton aide, salutation.

Discussions similaires

  1. [XL-2003] Variable hors procédure
    Par Djromé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/07/2011, 16h25
  2. Initialiser des variables hors constructeur
    Par sql_ignorant dans le forum Langage
    Réponses: 6
    Dernier message: 21/02/2011, 00h05
  3. [MySQL] Récupérer des variables hors d'une fonction
    Par piero-la-lune dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/02/2008, 11h30
  4. Utilisé une variable hors d'une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/02/2005, 20h21
  5. variable hors d'une fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/02/2005, 09h29

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