[?]   dans   mode   trier par   

[<] Sujet : [AS] Remplacement de nom dans le Finder
De : Jill-Jênn_VIE <anonyme@...>
Date : 2008-04-14 10:23:35

Sujet : Re: [AS] Remplacement de nom dans le Finder
De : KOENIG Yvan <anonyme@...>
Date : 2008-04-14 12:33:09

Sujet : Re: [AS] Remplacement de nom dans le Finder
De : Serge_Ségu <anonyme@...>
Date : 2008-04-14 14:08:05

Sujet : Re: [AS] Remplacement de nom dans le Finder
De : Jill-Jênn_VIE <anonyme@...>
Date : 2008-04-14 20:52:09

Sujet : Re: [AS] Remplacement de nom dans le Finder
De : Jill-Jênn_VIE <anonyme@...>
Date : 2008-04-14 20:52:21

Sujet : Re: [AS] Remplacement de nom dans le Finder
De : Daniel Varlet <anonyme@...>
Date : 2008-04-15 22:03:57

Le 14 avr. 08 à 10:03, Jill-Jênn VIE a écrit :
...
> (et un coucou à tous ceux qui se souviennent de moi)

Le plus dur ça a été d'oublier... ;-)
Un énorme salut à toi!

...
> Comment se fait-il que :
>
> tell application "Finder"
> 	set jee to folder "jee" of desktop
> 	repeat with i in jee
> 		name of i
> 	end repeat
> end tell
>
> me retourne quelque chose, tandis que :

Le plus rapide est la référence de forme "property of every  
element" (là c'est l'application qui fait les boucles, et pas en  
langage AS ;-)).
	
	tell application "Finder" to name of items of folder "jee" of desktop



Le 14 avr. 08 à 10:23, Jill-Jênn VIE a écrit :


> Bon ben comme on me répond vite, j'en profite ;-)
>
> tell application "Finder"
> 	set jee to folder "jee" of desktop
> 	set liste to {}
> 	repeat with i in jee
> 		if name of i ends with "b.png" then
> 			set name of i to "p" & (name of i)
> 		end if
> 	end repeat
> end tell
>
> Comment se fait-il qu'à l'issue de l'exécution de ce bout de code,
> j'obtiens des fichiers commençant par plusieurs p ?
>
> En fait, en lisant ton dernier message, Patrick, peut-être que c'est
> parce que la liste change, du coup il reprend plusieurs fois le même
> élément...

Comme ça fait au moins deux fois que tu poses la question de fond,  
voici un essai d'analyse/explication de ces mystères.

Il suffit de regarder les références renvoyées, et tout s'éclaire.

Je pourrais m'arrêter là, mais j'ai peur que ce soit un peu trop  
"Delphic"... ;-)



tell application "Finder"
	set jee to folder "jee" of desktop
	repeat with i in jee
		return i
	end repeat
end tell

--> item 1 of folder "jee" of folder "Desktop" of etc...

À chaque tour de boucle c'est l'item <index incrémenté> (que j'appelle  
n) du dossier qui est renvoyé.
Et ce dossier peut être modifié à tous moments. C'est bien ce dont tu  
avais l'intuition.
Quand tu modifies le nom d'un fichier, le fichier change de place dans  
l'ordre du dossier (tri par nom ou par date de modif, ou par choix  
utilisateur, j'ai la flemme de regarder).
item n du dossier ne renvoie plus le même fichier.
C'est donc "dangereux" si on ne sait pas ce qui se passe.
De plus des erreurs surviendront si on supprime des fichiers pendant  
la boucle.

Il faut, pour comprendre, essayer d'imaginer dans les grandes lignes  
(je n'ai pas le code source AS) ce que fait cette forme particulière  
de boucle, le  'repeat in'.
Tout d'abord le nombre d'itérations à faire est fixé en début.
'repeat in' demande d'abord "count of objet" pour connaître le nombre  
de tours à faire.
L'objet doit donc pouvoir répondre au message "count", sinon erreur.
On en déduit très astucieusement que l’objet n'est donc pas  
obligatoirement une classe list.
Si l'objet renvoie un résultat valide, alors 'repeat' se met à tourner  
en fabriquant à chaque fois une référence simpliste: item n of objet  
qu'il met dans la variable utilisateur donnée (i dans ton exemple).  
C'est aussi primitif que ça.
Autre déduction: l'objet doit répondre à index n. Ce qui est le cas de  
plusieurs classes du Finder.

Quand l'objet référencé peut-être modifié en cours de boucle, c'est  
donc risqué. La cata c'est si  le "count" des éléments varie. index n  
risque de ne plus exister. Exemple: suppression de fichiers dans un  
dossier.

Un style de référence moins "dangereux".

tell application "Finder"
	set jee to folder "jee" of desktop
	repeat with i in (get items of jee)
		return i
	end repeat
end tell

--> item 1 of { document file "index 1.html" of folder "jee" of folder  
"Desktop"of etc..., document file "index 2.html" of folder "jee" of  
etc.., etc...}

Là, la référence est fixe et les références aux éléments contenus  
assez précises. Il n'y aura plus ce genre de problèmes.

Ce n'est pas propre au Finder. Cela vient simplement du choix de  
l'objet à énumérer.

Un exemple avec un objet différent: une classe réfence AS qui  
référence une liste.
Cet objet répondra bien à count et à index n.

set xs to {1, 2, 3}
set jee to a reference to xs
repeat with i in jee
	set xs to {i, 8}
	try
		contents of i
	on error ert
		log ert --> ""Il est impossible d’obtenir item 3 of {item 3 of xs,  
8}."
	end try
end repeat

Il y certainement d'autres exemples.

A+


-- 
Daniel

_______________________________________________
Applescript_fr mailing list
anonyme@...
http://listes.patpro.net/mailman/listinfo/applescript_fr

Apple, AppleScript, AppleScript Studio, AppleTalk, AppleWorks, ColorSync, Finder, HyperCard, iBook, iLife, iMac, iWork, Keynote, Mac, Macintosh, Mac OS, Pages, Panther, PowerBook, Power Mac, Power Macintosh, QuickTime, Safari, Tiger, Xcode sont des marques déposées par Apple Computer, Inc., enregistrées aux Etats-Unis et dans les autres pays. Liste officielle