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 :

[AppleScript] Déclarer une liste un peu complexe


Sujet :

AppleScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut [AppleScript] Déclarer une liste un peu complexe
    Bonjour,

    Je continue à écrire des petites app en AppleScript. L'une d'elle me pose problème depuis 3 mois que j'ai tenté de la complexifier un peu.
    A mon avis, cela vient de la façon dont je déclare et nourris ma liste principale.

    Au fil du programme l'application nourrit donc une liste (appelons-la LA_LISTE):
    LA_LISTE = {item1,item2, item3, etc...} donc cette liste peut avoir un nombre d'item qui n'est pas fixé au départ.
    Mais chaque item est par contre forcément structuré ainsi avec 1+3 items :
    item N = {item N1, item N2, item N3, item N4}
    où :
    item N1 est un string non vide (exemple "jean-pierre")
    les 3 autres items sont eux mêmes des listes de strings:
    item N2 est une liste de string : {itemN21, item N22, itemN23,...}
    item N3 est une liste de string : {itemN31, item N32, itemN33,...}
    item N4 est une liste de string : {itemN41, item N42, itemN43,...}


    Donc la liste pourra ressembler à cela :
    LA_LISTE = { {Item11,{item111,item112,item113}, {item121,item122,item123}, {item131,item132,item133}}, {Item21,{item211,item212,item213}, {item221,item222,item223}, {item231,item232,item233}}, {Item31,{item311,item312,item313}, {item321,item322,item323}, {item331,item332,item333}}, ect }


    Je crois que j'ai un problème pour déclarer cette liste ...
    Faut il que je la déclare ainsi : LA_LISTE = { {"",{""},{""},{""}} }

    Ensuite lorsque je rencontre tel string, il faut que j'ouvre un nouvel item avec ce même format : {"",{""},{""},{""}}

    J'imagine alors qu'il faut que j'écrive LA_LISTE = LA_LISTE & {"tel string",{""},{""},{""}}


    Je crois que cela induit des soucis ensuite. Par exemple si aucune info destinée à l'item 3 n'a encore été trouvée (l'item 3 est donc vide à ce stade) mais que la première info trouvée soit destinée à nourrir l'item 4, il me semble que l'app va me dire qu'elle ne peut pas trouver l'item 4 . Comme si déclarer un item vide ne le faisait pas vraiment exister... quelque chose comme ça.

    Si je savais comment bien déclarer la liste au départ, je crois que je n'aurais pas de souci ensuite... Je crois que je ne sais pas comment déclarer (formater) une liste dont les éléments sont vides, en attendant d'être remplis au fur et à mesure que l'app avance dans sa recherche...

    Merci d'avance pour votre aide

    Martin

  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,
    Pour déclarer une liste vide :
    Cela semble correct pour ta liste globale que j'appelle ListeN1 car elle contient de 0 à N éléments, tous identiques.

    Comme tu appelles tous les niveaux avec item 1, item 2,... il est un peu difficile de comprendre ton explication, mais je vais supposer que pour le niveau en dessous, ListeN2, on a les règles suivantes:
    - le premier élément est toujours une string non vide,
    - le second élément est lui même une liste (ListeN3), éventuellement vide,
    - le troisième élément est aussi une liste (ListeN3), éventuellement vide,
    - le quatrième élément est aussi une liste (ListeN3), éventuellement vide,
    - tu souhaites toujours identifier directement le second ou le 3ème ou 4ème éléments, même si l'un d'entre eux est vide.
    Dans ce cas, tu dois utiliser un type de liste particulier qui s'appelle un record. Cela ressemble à une liste, mais les 4 éléments ont des noms.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set ListeN2 to {maString:"", it1:{}, it2:{}, it3:{}}
    Ce faisant, tu indiques à Applescript que tu considère toujours que cette "liste" à 4 éléments, même si l'un ou plusieurs d'entre eux sont vides.
    Chaque élément s'adresse par son nom maString, it1, it2, it3 ou encore it4 (je te conseille vivement de leur donner des noms plus représentatifs !).
    Exemple d'utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set maString of ListeN2 to "Toto"
    set it1 of ListeN2 to {"sous_item_11", "sous_item_12", "sous_item_13"}
    set it3 of ListeN2 to {"sous_item_31", "sous_item_32", "sous_item_33"}
    
    --> ListeN2 : {maString"Toto", it1:{"sous_item_11", "sous_item_12", "sous_item_13"}, it2:{}, it3:{"sous_item_31", "sous_item_32", "sous_item_33"}}
    Dans cet exemple, j'ai volontairement laissé vide it2, mais comme c'est un record, il existe bien: c'est une liste vide !

    En règle générale, si les éléments de la liste sont indifférents, tu utilises bien une liste.
    Si, par contre, tu souhaites les distinguer (l'item 2 net peut être confondu avec le 3) alors il faut prendre un record.
    J'ajoute que, comme les listes, tu peux parfaitement utiliser des records de records de records...
    D'où la nécessite de donner des noms bien clairs à chaque élément du record.
    L'inconvénient du record tient justement au fait que les items ne sont pas identiques en signification...donc on ne peut les atteindre avec un indice (item x of liste).

    Je pense que tes niveaux 1 et 3 ressemblent à des listes, mais ton niveau 2 ressemble à un record.

    Cordialement

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    Merci Philippe pour cette réponse si claire,

    Désolé si ma demande n'était pas assez précise ;(
    Il faut que je digère tout ça parce que pour l'instant j'ai l'impression qu'il faudrait que je définisse 3 nouveaux records pour chaque nouvel item de la liste. Mais peut-être me trompe-je...
    je te redis quand j'aurais compris...

    Merci encore mille fois pour ton aide

    Martin

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    Coucou Philippe,

    Je t'embête juste une petit seconde car je suis en phase " je ne comprends plus rien"...
    Je voulais juste que tu me confirme que lorsqu'on a une liste du genre :
    La_Liste = {a,b,c,d}
    puis une seconde liste du genre :
    Liste_de_Trucs_a_ajouter = {x,y,z}
    Lorsque j'écris:
    set La_Liste to La_Liste & Liste_de_Trucs_a_ajouter
    j'obtiens bien que:
    La_Liste est {a,b,c,d,x,y,z}
    et pas que :
    La_Liste est {a,b,c,d,{x,y,z}}

    Voili voilà.
    Je te remercie bien bien pour toute ton aide..
    Martin
    PS: j'avance sur la réécriture de mon prog et j'ai bien utilisé des records à certains moment. Cela m'a été fort utile et je t'en remercie fort !!!
    Je t'enverrais un lien lorsque l'app tiendra debout pour que tu vois à quoi elle sert pour les utilisateurs de Final Cut Pro X...

  5. #5
    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 Martin,
    Effectivement, l'opérateur & mets bien les 2 listes dans une seule.
    Pour s'en convaincre, tu peux demander le count de la liste.
    Dans le premier cas {a,b,c,d,x,y,z}, le count vaut 7.
    Dans le second cas {a,b,c,d,{x,y,z}}, le count vaut 5 car l'item 5 est {x,y,z}.

    Je précise que pour ajouter des éléments à une liste ont doit utiliser non pas le &, mais 'at end' ou 'at beginning' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set L to {1, 2, 3}
    set end of L to 4
    set beginning of L to 0
    La première instruction ajoute 4 comme dernier élément de la liste, la seconde instruction ajoute le 0 en début de liste.
    L est donc finalement {0,1,2,3,4}

    Cordialement

  6. #6
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    Merci Philippe pour ces réponses toujours aussi claires.
    Je continue à avancer et progresser grâce à toi.
    Belle journée
    Martin

  7. #7
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 50
    Points : 15
    Points
    15
    Par défaut
    Voici Philippe,

    Quelques petites captures d'écran pour te montrer ce que ton aide a permis de réaliser.
    L'app est bien lente quand même (et je cherche où je peux l'aider un peu) mais fait le job escompté.
    Il s'agit donc de partir à la pêche à tout un tas de données tirées d'un XML de Final Cut Pro x et de pondre un autre XML (constitués de titrages qui se superposent aux plans) qui peut être réimporter dans Final Cut Pro mais aussi un tableur pour consulter cela à part.
    C'est fort utile pour la postproduction et palie un manque dans Final Cut Pro (qui pourtant est très fort pour faire des inventaires).
    Et peut-être que ça donnera des idées à Apple.
    Nom : FXBOOMRANG _GUY.jpeg
Affichages : 160
Taille : 328,5 KoNom : SAFARFXBOOMXLS.jpeg
Affichages : 176
Taille : 708,3 KoNom : FXBOOMERANG_V5.jpeg
Affichages : 193
Taille : 733,1 KoNom : FXBOOMERANG_JeanYves Chantoiseau.jpeg
Affichages : 186
Taille : 386,5 KoNom : -FXBOOMERANG_96dB.jpeg
Affichages : 179
Taille : 80,1 Ko
    Je m'attache maintenant à créer une petite fenêtre où l'utilisateur peut choisir quelles données rechercher lorsque d'autres ne lui sont pas utiles. Et je crois que ce que tu m'avais expliqué il y a biiiiieeeeen longtemps sur les préférences va me servir.

    Merci encore pour ta grande aide et ta pédagogie Philippe.

    Martin

Discussions similaires

  1. Déclarer une liste vide
    Par cricri77200 dans le forum Langage
    Réponses: 3
    Dernier message: 19/05/2009, 23h00
  2. Réponses: 2
    Dernier message: 17/03/2008, 14h17
  3. differentes façons de déclarer une liste
    Par christianf dans le forum C#
    Réponses: 3
    Dernier message: 14/03/2008, 11h04
  4. Construction d'une requête un peu complexe
    Par dauphin34000 dans le forum SQL
    Réponses: 9
    Dernier message: 24/05/2007, 11h43
  5. Création d'une requête un peu complexe
    Par vpicchi dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/01/2007, 21h52

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