Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

WD10 - Liste Images et problème de tri des items dans la liste quand il y a des chiffres

7 réponses
Avatar
Val
Bonjour

Dans une liste de 11 images, les images sont affichées dans l'ordre IMAGE
(1).JPEG, IMAGE (10).JPEG, IMAGE (11).JPEG, IMAGE (2).JPEG, ..., IMAGE
(9).JPEG, alors que dans l'explorateur de Windows, elles sont affichées dans
l'ordre IMAGE (1).JPEG, IMAGE (2).JPEG, IMAGE (3).JPEG, ..., IMAGE
(11).JPEG.

Je m'explique.

Mon dossier MesDocuments\Images contient 11 images, soit :
IMAGE (1).JPEG
IMAGE (2).JPEG
IMAGE (3).JPEG
IMAGE (4).JPEG
...
...
IMAGE (10).JPEG
IMAGE (11).JPEG

Quand je consulte le contenu de ce dossier dans l'explorateur de Windows,
les images sont classées dans l'ordre suivant:
IMAGE (1).JPEG
IMAGE (2).JPEG
IMAGE (3).JPEG
IMAGE (4).JPEG
...
...
IMAGE (10).JPEG
IMAGE (11).JPEG

Le truc tout simple quoi.

A présent, je crée une fenêtre avec mon langage de 5 ou 6eme génération.
Dans cette fenêtre, je crée une liste image et je place, dans le code
d'initialisation, le code suivant:

Fic=fRep(ComplèteRep(SysRep(srMesImages))+"*.JPEG")
TANTQUE Fic<>""
ListeAjoute(ListeImage1,Fic,ComplèteRep(SysRep(srMesImages))+Fic)
Fic=fRep("")
FIN

Voilà.
A présent, je teste la fenêtre.
Tout fonctionne super bien, à savoir que les 11 images apparaissent dans la
liste.
Oui mais bon ... elles sont classées dans l'ordre suivant:
IMAGE (1).JPEG
IMAGE (10).JPEG
IMAGE (11).JPEG
IMAGE (2).JPEG
IMAGE (3).JPEG
IMAGE (4).JPEG
...
...
IMAGE (9).JPEG

Que j'opte pour une liste triée ou pas, cela ne change rien.

Sauf erreur de ma part, il n'y a rien à faire au niveau du paramétrage de la
liste et, vous le pensez bien, cela fait bien rire mon
client, lequel m'invite à adopter un langage plus ... sérieux selon son
expression !

Y a t'il une solution pour que les images apparaissent dans l'ordre IMAGE
(1).JPEG, IMAGE (2).JPEG, IMAGE (3).JPEG, etc ... ou faut-il
attendre dix ans pour que PC-SOFT corrige ce genre de "tare" ???

Merci de vos réponses.

Val

7 réponses

Avatar
Georges Peyre
Bonsoir

Il n'a aucun bug de Windev
Dans l'explorateur si tu cliques sur le titre de la colonne Nom tu
verras que les fichiers s'affichent dans le même ordre que Windev,
c'est à dire l'ordre suivant

Oui mais bon ... elles sont classées dans l'ordre suivant:
IMAGE (1).JPEG
IMAGE (10).JPEG
IMAGE (11).JPEG
IMAGE (2).JPEG
IMAGE (3).JPEG
IMAGE (4).JPEG
...
...
IMAGE (9).JPEG




Celà signifie que ton explorateur affiche la liste certainement classée
sur la date lorsque tu l'ouvres

Donc dans Windev il faut donc que tu charges les fichiers dans une
table avec le nom et la date et qu'ensuite tu tries la colonne date

... ou faut-il
attendre dix ans pour que PC-SOFT corrige ce genre de "tare" ???



ou faut t-il que tu réfléchisses avant d'accuser

Cordialement

--
Elle est pas belle la vie ?
Avatar
Romain PETIT
Georges Peyre avait écrit le 28/11/2006 :
Bonsoir

Il n'a aucun bug de Windev
Dans l'explorateur si tu cliques sur le titre de la colonne Nom tu verras que
les fichiers s'affichent dans le même ordre que Windev, c'est à dire l'ordre
suivant

Oui mais bon ... elles sont classées dans l'ordre suivant:
IMAGE (1).JPEG
IMAGE (10).JPEG
IMAGE (11).JPEG
IMAGE (2).JPEG
IMAGE (3).JPEG
IMAGE (4).JPEG
...
...
IMAGE (9).JPEG




Celà signifie que ton explorateur affiche la liste certainement classée sur
la date lorsque tu l'ouvres



Non, non.
L'explorateur (sous XP) classe ces fichiers selon le nom et place
effectivement le "IMAGE (10)" avant le "IMAGE (2)"

Pourquoi ? réponse ici :
http://support.microsoft.com/kb/319827/


Donc dans Windev il faut donc que tu charges les fichiers dans une table avec
le nom et la date et qu'ensuite tu tries la colonne date



Non, il veut trier selon le nom, et faire en sorte que "IMAGE (10)"
soit placé après "IMAGE (2)".
Pour faire cela, il faudra donc développer ton propre algorithme.

... ou faut-il
attendre dix ans pour que PC-SOFT corrige ce genre de "tare" ???





WD n'est pas en cause. Mais ca pourrait effectivement être une demande
légitime d'évolution...


A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Georges Peyre
Bonjour Romain

Tu as tout à fait raison, le paramétrage de mon registre n'était pas
correct : mon micro a été installé avec Windows XP d'origine et les
passage à SP1 puis à SP2 n'onnt pas corrigé cette option.

Non, non.
L'explorateur (sous XP) classe ces fichiers selon le nom et place
effectivement le "IMAGE (10)" avant le "IMAGE (2)"
Pourquoi ? réponse ici :
http://support.microsoft.com/kb/319827/



Je viens de corriger le registre et maintenant moi aussi je suis
confronté au même problème : Mes listes de fichiers sous Windev ne sont
plus en harmonie avec l'ordre de tri de l'explorateur


Non, il veut trier selon le nom, et faire en sorte que "IMAGE (10)" soit
placé après "IMAGE (2)".
Pour faire cela, il faudra donc développer ton propre algorithme.


As-tu une idée sur la façon de créer cet algorithme ou est-il déjà
existant quelque part ?

Cordialement

--
Elle est pas belle la vie ?
Avatar
[Bernard Vessiot]
Georges Peyre a utilisé son clavier pour écrire :
Bonjour Romain

Tu as tout à fait raison, le paramétrage de mon registre n'était pas correct :
mon micro a été installé avec Windows XP d'origine et les passage à SP1 puis
à SP2 n'onnt pas corrigé cette option.

Non, non.
L'explorateur (sous XP) classe ces fichiers selon le nom et place
effectivement le "IMAGE (10)" avant le "IMAGE (2)"
Pourquoi ? réponse ici :
http://support.microsoft.com/kb/319827/



Je viens de corriger le registre et maintenant moi aussi je suis confronté au
même problème : Mes listes de fichiers sous Windev ne sont plus en harmonie
avec l'ordre de tri de l'explorateur


Non, il veut trier selon le nom, et faire en sorte que "IMAGE (10)" soit
placé après "IMAGE (2)".
Pour faire cela, il faudra donc développer ton propre algorithme.


As-tu une idée sur la façon de créer cet algorithme ou est-il déjà existant
quelque part ?

Cordialement



salut a tous,
ayant ete confronté au meme problème,
j'ai résolu cela en creant le petit algo suivant facilement adaptable :

tbl is array of 1 chaîne// tableau de stockage
fic is string
i is int
fic=fRep("d:etat"+"*.txt")//recherche dans une repertoire
WHILE fic<>""
i++
Dimension(tbl,i)//redimension du tableau
tbl[i]=fic//remplissage avec les fichiers correspondant
fic=fRep("")
END

trieTbl(tbl,Liste1)//trie et affichage

// et maintenant la procedure
//
PROCEDURE trieTbl(tbl,laliste)
count1 is int
count2 is int
cc is int
temp is string

FOR count1 = 1 TO Dimension(tbl)
FOR count2 = count1 + 1 TO Dimension(tbl)
cc=ChaîneCompare(tbl[count1],tbl[count2],ccRespecteNumérique)
IF cc=1 THEN
temp = tbl[count1]
tbl[count1] = tbl[count2]
tbl[count2] = temp
END
END
ListeAjoute(laliste,tbl[count1])
END

voila cela marche sans problèmes...!
bon dev's!
@++

--
[Bernard Vessiot]
34980 Saint Gély du Fesc

Avatar
[Bernard Vessiot]
[Bernard Vessiot] a pensé très fort :
Georges Peyre a utilisé son clavier pour écrire :



Attention, j'ai juste oublié un truc: la liste ne doit pas être triée !
voila !

--
[Bernard Vessiot]
34980 Saint Gély du Fesc

Avatar
Val
Bonjour Georges

"Georges Peyre" a écrit dans le message de news:


Il n'a aucun bug de Windev



Qui te parle de bug ???
Moi ???
Certainement pas ... relis mon post !
Je disais: ... y a t'il une solution pour que les images apparaissent dans
l'ordre IMAGE (1).JPEG, IMAGE (2).JPEG, IMAGE (3).JPEG, etc ... ou faut-il
attendre dix ans pour que PC-SOFT corrige ce genre de "tare" ???

Donc, je ne parlais pas d'un bug, mais d'une tare ... c'est-à-dire d'un
défaut dans la manière de trier les noms de fichiers contenant des chiffres
d'une façon qui ne correspond plus à l'air du temps, tout simplement ... ce
qui n'est bien sur pas assimilable à un bug.
En effet, il y a une différence entre "bug" et "tare".
Ainsi, si aujourd'hui tu développes un logiciel qui ne traite que des
fichiers au format "XXXXXXXX.XXX", c'est-à-dire 8 caractères pour le nom du
fichier et 3 caractères pour son extension, on ne pourra pas dire qu'il est
buggé.
Non, on ne pourra pas dire qu'il est buggé ... par contre on pourra dire que
ton logiciel est affublé d'une tare, puisqu'aujourd'hui et sauf
circonstances particulières (une demande du client, une exigence technique
pour compatiblité avec des données existantes, etc ...), pondre un logiciel
qui ne gère que le format 8.3 c'est être hors du temps !


Dans l'explorateur si tu cliques sur le titre de la colonne Nom tu verras
que les fichiers s'affichent dans le même ordre que Windev, c'est à dire
l'ordre suivant

Oui mais bon ... elles sont classées dans l'ordre suivant:
IMAGE (1).JPEG
IMAGE (10).JPEG
IMAGE (11).JPEG
IMAGE (2).JPEG
IMAGE (3).JPEG
IMAGE (4).JPEG
...
...
IMAGE (9).JPEG







Faux ....
Dans l'explorateur, sous Windows XP et par défaut, les fichiers sont
classées dans l'ordre
IMAGE (1).JPEG
IMAGE (2).JPEG
IMAGE (3).JPEG
IMAGE (4).JPEG
...
...
IMAGE (9).JPEG
IMAGE (10).JPEG
IMAGE (11).JPEG

... c'est à dire dans l'ordre 1, 2, 3, 4, ... 10, 11, ... 20, 21, etc ... et
non dans l'ordre 1, 10, 11, ... 2, 20, 21, ... 3, 31, etc ...


Celà signifie que ton explorateur affiche la liste certainement classée
sur la date lorsque tu l'ouvres

Donc dans Windev il faut donc que tu charges les fichiers dans une table
avec le nom et la date et qu'ensuite tu tries la colonne date






Humm ...
Qu'est-ce que les dates ont à voir dans cette histoire ?
Pourrrais-tu m'expliquer cela ?
Oui, pourrrais-tu m'expliquer par quel tour de magie on peut, en triant des
fichiers sur leur date, modifier leur classement par nom ?
Oui, pourrrais-tu m'expliquer cela car là, à mon avis, ça doit être un méga
algorithme à ranger dans un coin de son disque dur.




... ou faut-il
attendre dix ans pour que PC-SOFT corrige ce genre de "tare" ???



ou faut t-il que tu réfléchisses avant d'accuser




Bigre ...
Selon toi, faire état d'un comportement qui ne correspond pas à ce que l'on
souhaire ou qui ne correspond pas à ce qui est devenu une norme puisqu'elle
repose sur une réalité (le chiffre 10 vient après le chiffre 2), c'est faire
preuve d'accusation ?
Donc, si tu développes un logiciel qui imprime des états d'une gestion
client triés sur le nom du client (et que sur ce champ là) et si demain
quelqu'un te demande comment il doit faire pour trier les états sur le code
postal en lieu et place du nom, tu vas lui rentrer dedans jugeant qu'il
t'accuse d'avoir pondu un logiciel qui ne marche pas ?
Si c'est le cas, alors nous n'avons pas la même conception des choses, tant
du point de vue du contact client que de l'approche en matière de regard sur
son travail car, comme disait je ne sais plus qui "il faut souvent se
remettre en question pour faire du bon travail".

Donc, concernant cette façon dont Windev trie les noms de fichiers contenant
des chiffres dans les listes (mais aussi dans les tables, dans les tree
view, etc ...), je persiste à dire que ce n'est pas un bug, mais une tare.
En effet, s'il y a 10 ou 20 ans, tapoter sur le clavier d'un ordinateur
était une affaire de spécialistes et s'il était donc facile à ces
spécialistes de comprendre pourquoi, dans une liste triée sur le nom du
fichier, le fichier IMAGE10.JPEG apparait juste après le fichier IMAGE1.JPEG
et avant le fichier IMAGE2.JPEG, aujourd'hui ce n'est plus la même chose car
l'ordinateur trône désormais dans les salons au côté de la télévision et
autres matériels multimédias et il n'est donc plus nécessairement réservé
aux spécialistes.
Donc, là, maintenant et à l'ére du numérique, va expliquer à un client qui
n'est pas un spécialiste que ton logiciel est développé avec un outil
tip/top, alors que les noms de fichiers qu'il a récupérés via son appareil
photos ne sont pas classés dans l'ordre 1, 2, 3, ... 9, 10, 11, etc ...
puisque ton logiciel, pourtant tip/top et à la pointe des évolutions
puisqu'il te coûte (au minimum) 501,12 Euros en mise à jour par an, va
s'évertuer à considérer les valeurs numériques comme des chaines de
caractères ...

Oui, va lui faire comprendre, en 2007, que quand il va consulter sa
photothèque avec un logiciel développé avec WD, la photo IMAGE1000.JPEG qui
est sa 1000eme photo sera placée en position 4, c'est-à-dire après les
images IMAGE1.JPEG, IMAGE10.JPEG et IMAGE100.JPEG.
Pour lui, en effet, trier des noms de fichiers sur l'ordre 1, 10, 11, ... 2,
20, 21, ... 3, 31, etc ... c'est faire du mauvais boulot car, à l'ére du
numérique, les valeurs numériques ne doivent plus être considérées comme des
chaines de caractères ...
Et on ne peut pas lui dire qu'il a tort ... puisqu'aujourd'hui, en 2007, il
a raison !

Voilà.

A+

Val
Avatar
Georges Peyre
Bonjour,

Pour me faire pardonner de Val et remercier Romain Petit et Bernard
Vessiot de leur aide j'ai écrit une procédure simpliste mais qui
fonctionne bine qu'elle traite caractère par caractère.
Celle-ci consiste à créer un critère de tri pour chaque nom de fichier
lu
Elle n'est ni parfaite ni sophistiquée.
Peut-etre que d'autres fonctions de Windev ou l'utilisation
d'expressions régulières auraient pu servir : si vous pouvez la rendre
plus simple merci d'avance.

Romain Petit
Pour faire cela, il faudra donc développer ton propre algorithme.





Le principe est de créer une table contenant au moins le nom des
fichiers et une colonne invisible à dénommer ColonneTri
La procédure de constitution de critère de tri à pour fonction
d'aligner tous les nombres présents dans un nom sur une longueur de 18
caractères en insérant des 0 devant le nombre trouvé :
Exemple si un nombre est 156 on le transforme en 000000000000000156

----------
Pour le test Créer une fenêtre contenant

Un bouton destiné à charger la table dénommé BCharge
Un champ texte dénommé Saisie1
Un champ texte dénommé SaisieATrier
Une table à 2 colonnes dénommée Table1
dont une colonne qui sera rendue invisible après test dénommée
ColonneTri

-------------
Voila le code
-------------

Le code Clic de BCharge est le suivant :

NomFic est une chaine
TableSupprimeTout(Table1)
NomFic =fRep("C:Documents and SettingsMes
documents"+"*.txt")//recherche dans une repertoire
TANTQUE NomFic <> ""
Saisie1 = NomFic
PCreationCritereTri()
TableAjouteLigne(Table1,NomFic,SaisieATrier) //remplissage avec les
fichiers correspondant
NomFic=fRep("")
END
TableTrie(Table1,"ColonneTri")
--------------

PROCEDURE PCreationCritereTri()
WChaineFichier est un tableau de 1 caractère
WChaineNumerique est un tableau de 1 caractère
WChaineExtension est une chaîne
WResCaract est un entier
WCaractLu est une chaîne
INumATrier est un entier = 0
INumNumer est un entier = 0

WChaineExtension = fExtraitChemin(Saisie1,fExtension)

I est un entier
NCaract est un entier
NComplete est un entier

NPosNum est un booléen = Faux
NPoint est un entier


TableauSupprimeTout(WChaineFichier)
NPoint = Position(Saisie1,".",DepuisDébut) - 1
// on charge tout le nom du fichier sauf l'extension
POUR I = 1 A NPoint
SI Milieu(Saisie1,I,1) >= "0" ET Milieu(Saisie1,I,1) <= "9" ALORS
NPosNum = Vrai
FIN
TableauAjoute(WChaineFichier, Milieu(Saisie1,I,1))
FIN
SI NPosNum = Faux // le nom de fichier ne contient pas du tout de
chiffres
SaisieATrier = Saisie1
// Info("Le nom ne contient pas des chiffres ")
RETOUR
FIN

SaisieATrier = ""
WResCaract = 0
TableauSupprimeTout(WChaineNumerique)
POUR I = 1 A NPoint
SI WChaineFichier[I] >= "0" ET WChaineFichier[I] <= "9" ALORS
WResCaract ++
INumNumer ++
WCaractLu = WChaineFichier[I]
TableauAjoute(WChaineNumerique, WCaractLu)
SINON
// avant de charger de l'alpha on insère le numérique en attente dans
WChaineNumerique
SI WResCaract > 0 ALORS
// avant de continuer à charger de l'alpha on aligne le numerique
sur 18 caractères
POUR NComplete = 1 A (18 - INumNumer)
SaisieATrier = SaisieATrier + "0"
FIN
// on complete avec le chiffre aligné
POUR NComplete = 1 A INumNumer
SaisieATrier = SaisieATrier + WChaineNumerique[NComplete]
FIN
INumNumer = 0
WResCaract = 0
TableauSupprimeTout(WChaineNumerique)
FIN
INumATrier ++
SaisieATrier = SaisieATrier + WChaineFichier[I]
FIN

FIN

SI WResCaract > 0 ALORS
// avant de continuer à charger de l'alpha on aligne le numerique sur
18 caractères
POUR NComplete = 1 A (18 - INumNumer)
SaisieATrier = SaisieATrier + "0"
FIN
// on complete avec le chiffre aligné
POUR NComplete = 1 A INumNumer
WCaractLu = WChaineNumerique[NComplete]
SaisieATrier = SaisieATrier + WCaractLu
FIN
INumNumer = 0
WResCaract = 0
TableauSupprimeTout(WChaineNumerique)
FIN
SaisieATrier = SaisieATrier+WChaineExtension

Cordialement

--
Elle est pas belle la vie ?