Page 1 sur 1
[R] L'ordre des fichiers n'est pas respecté.
Posté : mer. 30 sept. 2009 10:20
par eric
Bonjour.
Je viens de tomber sur un cas bizarre.
Prenons l'exemple d'un code tout simple:
Code : Tout sélectionner
$var = FileOpenDialog ("Choisissez des fichiers","","(*.*)",4)
$var2 = StringReplace($var, "|", @CRLF)
MsgBox(4096,"",$var2)
En gros on choisit dans une boite de dialogue des fichiers et ensuite a liste des fichiers choisit s'affiche dans un message.
Sauf que si je choisis les fichiers à l'aide de la touche SHIFT ou CTRL les fichiers s'affichent ensuite dans l'ordre, sauf que le dernier fichier n'est pas le dernier qui s'affiche dans la liste mais le premier.
C'est pas normal.
Ca ne le fait pas si je choisis les fichiers par une fenêtre de sélection.
Je ne sais pas si mon explication est claire.
Y a t il un moyen de régler cela ?
Est ce un bug ?
Merci
Re: [..] L'ordre des fichiers n'est pas respecté.
Posté : mer. 30 sept. 2009 16:08
par Iste
car le dernier que tu sélectionne a en plus le focus, il est double-select quoi ^^'
j'avais déja eu ce probleme, je sais plus ou
Enfin, c'est peut etre pas ca, mais ca vaut le coup de tester, moi je peux pas actuellement ^^'
Re: [..] L'ordre des fichiers n'est pas respecté.
Posté : mer. 30 sept. 2009 16:13
par eric
car le dernier que tu sélectionne a en plus le focus, il est double-select quoi ^^'
Merci Iste pour ta réponse
Peut être que c'est ça, mais je ne vois pas comment l'empêcher.
Re: [..] L'ordre des fichiers n'est pas respecté.
Posté : mer. 30 sept. 2009 16:21
par Iste
Ben, en étant barbar, tu peux 'simplement' refaire la fonction FileOpenDialog(), ou placer d'office le dernier en 1er mais bon...
Re: [..] L'ordre des fichiers n'est pas respecté.
Posté : mer. 30 sept. 2009 16:54
par eric
Ben, en étant barbar, tu peux 'simplement' refaire la fonction FileOpenDialog()
Tu veux dire recréer toute la boite de dialogue manuellement ?
Dans ce cas je me contenterais du bug
ou placer d'office le dernier en 1er mais bon
Ben oui mais si ça ne le fait pas avec une fenêtre de sélection, ça va être chaud de déterminer si l'utilisateur a choisis la méthode avec CTRL ou SHIFT, ou si il a fait une fenêtre de sélection.
Vous croyez que ça vaudrait le coup de poster un message sur le forum anglais pour le signaler ?
Merci
Re: [..] L'ordre des fichiers n'est pas respecté.
Posté : mer. 30 sept. 2009 19:26
par Iste
Alors !
Je viens de me pencher sur le problème pour voir comment les autres logiciels s'en sortent.
Conclusion, FileOpenDialog trie alphabétiquement les fichiers, par conséquent, l'ordre de sélection est toujours l'ordre alphabétique.
Du coup, trie ton array pour etre sur que le 1er ne soit pas mal placé, et hop ^^ -> _ArraySort()
Faudra quand meme vérifier un coup, mais pour moi c'est ca
Pis sinon, si ton anglais est assez bon, fofo anglais directe bien sur, ils sont beaucoup plus nombreux
(et compétant), tu auras donc plus de chance de trouver la solution, et nous la faire partager ^^
Re: [..] L'ordre des fichiers n'est pas respecté.
Posté : mer. 30 sept. 2009 21:50
par Tlem
A première vue, cela est dût au composent de Microsoft.
Regardez la zone "Nom du fichier" lors de votre sélection multiple.
Windows rajoute à droite de la ligne la dernière sélection.
Donc déjà si Windows ne renvoi pas les bonnes informations, comment voulez-vous que AutoIt s'en sorte ...
La seule solution serait de mettre tout les éléments dans un tableau(
StringSplit), ensuite un tris par ordre croissant (
_ArraySort) puis le traitement vers votre sortie.
► Afficher le texteComme ceci
Code : Tout sélectionner
#include <array.au3>
$Var = FileOpenDialog ("Choisissez des fichiers","C:\","(*.*)",4)
$aVar = StringSplit($Var,"|")
_ArraySort($aVar,0,2)
_ArrayDisplay($aVar, "")
Re: [..] L'ordre des fichiers n'est pas respecté.
Posté : jeu. 01 oct. 2009 04:45
par jchd
Attention quand même aux raccourcis saisissants.
Les noms de fichiers Windows sont en Unicode (non normalisé) et AutoIt ne sait pas trier de l'Unicode. _ArraySort ne sera pas fiable ou, du moins renverra à l'occasion un ordre non souhaitable ou différent d'une installation à l'autre.
Hormis faire appel à ICU, et encore, il n'y a pas de solution générale à ce problème et ICU est certainement un marteau-pilon pour cette épingle-là.
Une solution bâtarde mais jouable est d'employer un tri par la fonction StringCompareW de Windows avec des paramètres "génériques".
Ceci dit, du fait que Windows autorise des noms de fichiers "visionymes" (apparaissant rigoureusement identiques mais distincts pour NTFS), on peut dire que le problème est insoluble si l'on exige un fonctionnement correct dans tous les cas.
Je sais, je pinaille !
Re: [..] L'ordre des fichiers n'est pas respecté.
Posté : jeu. 01 oct. 2009 07:40
par Tlem
Hé oui, comme je l'ai dit précédemment :
Donc déjà si Windows ne renvoi pas les bonnes informations, comment voulez-vous que AutoIt s'en sorte ...
Re: [..] L'ordre des fichiers n'est pas respecté.
Posté : jeu. 01 oct. 2009 09:09
par eric
Bonjour,
Effectivement c'est un truc de Windows ça
J'ai testé avec d'autres logiciels est en utilisant cette méthode pour ouvrir des fichiers, c'est le dernier qui s'ouvre d'abord.
Astuce : sélectionner les fichiers dans l'ordre inverse avec Shift et la c'est correct.
En tout cas merci pour m'avoir éclairé.
Re: [R] L'ordre des fichiers n'est pas respecté.
Posté : jeu. 01 oct. 2009 21:39
par Tlem
Une autre astuce consiste à faire sa sélection, puis en dernier lieu on dé-sélectionne le dernier choix.
