SortList et #PB_Sort_NoCase

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
erhk
Messages : 30
Inscription : lun. 24/nov./2008 12:47

SortList et #PB_Sort_NoCase

Message par erhk »

Bonjour,

Avec le code suivant :

Code : Tout sélectionner

NewList MaListe.s()
  
  AddElement(MaListe())
  MaListe() = "Pb"
  
  AddElement(MaListe())
  MaListe() = "BZ"
  
  AddElement(MaListe())
  MaListe() = "BA"
  
  AddElement(MaListe())
  MaListe() = "Ba"
  
  SortList(MaListe(), #PB_Sort_Ascending | #PB_Sort_NoCase)
  
  ForEach MaListe()
    Debug MaListe()
  Next
je pensais obtenir : "BA", "Ba", "BZ", "Pb"
or, j'obtiens : "BA", "BZ", "Ba", "Pb"

Qu'est ce que je n'ai pas compris ?
Merci.
Kubuntu 13.04 x64, PB 5.21 LTS
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: SortList et #PB_Sort_NoCase

Message par MLD »

@ erhk

Regarde la correspondance des lettres avec le code ASCII et tu vas comprendre.
Mais avec #PB_Sort_NoCase ceci fonctionne chez moi ?
soit BA Ba BZ Pb
Dernière modification par MLD le dim. 22/déc./2013 9:44, modifié 1 fois.
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: SortList et #PB_Sort_NoCase

Message par Micoute »

Bonjour erhk,

il ne faut pas mettre #PB_Sort_NoCase, car dans ce cas PB ne tient pas compte de la casse.

Code : Tout sélectionner

NewList MaListe.s()
  
  AddElement(MaListe())
  MaListe() = "Pb"
  
  AddElement(MaListe())
  MaListe() = "BZ"
  
  AddElement(MaListe())
  MaListe() = "BA"
  
  AddElement(MaListe())
  MaListe() = "Ba"
  
  SortList(MaListe(), #PB_Sort_Ascending)
  
  ForEach MaListe()
    Debug MaListe()
  Next
Tiens compte du conseil de MLD que je salue au passage !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: SortList et #PB_Sort_NoCase

Message par MLD »

@ Micoute

Bonne fêtes de fin d'année a mon voisin d'en face :lol: :lol:
erhk
Messages : 30
Inscription : lun. 24/nov./2008 12:47

Re: SortList et #PB_Sort_NoCase

Message par erhk »

Merci pour vos réponses. Mais je ne comprends toujours pas.

@ MLD
Oui, oui en ASCII les majuscules sont avant les minuscules. (Je compile en unicode, mais je pense que cela ne change rien)
Manifestement, avec le même code nous n'obtenons pas le même résultat !

@ Micoute
"#PB_Sort_NoCase ne tient pas compte de la casse" : c'est justement ce que je veux, mais avec ou sans #PB_Sort_NoCase j'obtiens le même résultat.

Problème spécifique à Linux ?
Kubuntu 13.04 x64, PB 5.21 LTS
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: SortList et #PB_Sort_NoCase

Message par MLD »

@erhk
Fait un essai en compilant sans unicode.c'est certainement le problème. :(
erhk
Messages : 30
Inscription : lun. 24/nov./2008 12:47

Re: SortList et #PB_Sort_NoCase

Message par erhk »

@ MLD
Bingo ! Cela vient bien de l'unicode.

Ce qui me pose un sérieux problème, puisque pour trier je doit désactiver l'unicode, mais dans le même programme j'ai besoin qu'il soit activer pour lire correctement mes données accentuées.
Est-ce possible de basculer de l'un à l'autre par programmation ?

Merci, par avance, pour toutes pistes pouvant m'aider.
Kubuntu 13.04 x64, PB 5.21 LTS
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: SortList et #PB_Sort_NoCase

Message par MLD »

@erhk

La table ASCII comprend en principe les lettres accentuées (donc pourquoi l'unicode?).
Mais que le tri ne fonctionne pas avec l'unicode me parait une anomalie voir un BUG???
erhk
Messages : 30
Inscription : lun. 24/nov./2008 12:47

Re: SortList et #PB_Sort_NoCase

Message par erhk »

De nouveau Bonjour,
et Bonne Année à tous.

Je me permets de relancer le sujet en faisant un petit récapitulatif de mes essais.

Donc en utilisant le code suivant :

Code : Tout sélectionner

NewList MaListe.s()
  
  AddElement(MaListe())
  MaListe() = "Pb"
  
  AddElement(MaListe())
  MaListe() = "BZ"
  
  AddElement(MaListe())
  MaListe() = "BA"
  
  AddElement(MaListe())
  MaListe() = "Ba"
  
  SortList(MaListe(), #PB_Sort_Ascending | #PB_Sort_NoCase)
  
  ForEach MaListe()
    Debug MaListe()
  Next
J'obtiens les résultats suivants :

Sous Windows 7 pro 64 bits SP1 (VirtualBox)
avec support Unicode activé ou non (option compilateur)
BA, Ba, BZ, Pb

Sous Xubuntu 13.04 64 bits
avec support Unicode désactivé
BA, Ba, BZ, Pb

Sous Xubuntu 13.04 64 bits
avec support Unicode activé
BA, BZ, Ba, Pb

Pour lire correctement les données en provenance de fichiers créés et alimentés manuellement par WordPad / MousePad :
Sous Windows, le support Unicode doit être désactivé.
Sous Xubuntu, le support Unicode doit être activé.

Voilà, voilà, à votre avis bug à signaler ou pas ?
Kubuntu 13.04 x64, PB 5.21 LTS
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: SortList et #PB_Sort_NoCase

Message par Ar-S »

Et ainsi tu obtiens quoi ?
SortList(MaListe(), #PB_Sort_NoCase)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
erhk
Messages : 30
Inscription : lun. 24/nov./2008 12:47

Re: SortList et #PB_Sort_NoCase

Message par erhk »

Ouf ! Quelle rapidité !

Avec Unicode
BA, BZ, Ba, Pb

Sans
BA, Ba, BZ, Pb

Pareil donc, ce qui semble normal le tri ascendant étant l'option par défaut.
Kubuntu 13.04 x64, PB 5.21 LTS
erhk
Messages : 30
Inscription : lun. 24/nov./2008 12:47

Re: SortList et #PB_Sort_NoCase

Message par erhk »

En tri descendant ça marche !?

Pb, BZ, BA, Ba avec ou sans Unicode
Kubuntu 13.04 x64, PB 5.21 LTS
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: SortList et #PB_Sort_NoCase

Message par Ar-S »

Attend peut-être d'autres avis sinon post ton exemple sur le fofo anglais
ça sent tout de même un peu le bug sous linux.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
erhk
Messages : 30
Inscription : lun. 24/nov./2008 12:47

Re: SortList et #PB_Sort_NoCase

Message par erhk »

Merci pour tes réponses.
OK j'attends d'autres avis.
Quant au forum anglais, comme je pense déjà avoir eu l'occasion de l'écrire ici même pour une autre occasion, je connais pas mal de vaches espagnoles qui s'en sortent beaucoup mieux en anglais que moi !
Et oui, je suis un ancien ! :lol:
Kubuntu 13.04 x64, PB 5.21 LTS
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: SortList et #PB_Sort_NoCase

Message par Fig »

L'idéal serait de tout basculer en ASCII comme ça pas de problème... (à la condition que ton texte soit en Français, tu auras tout les caractères accentués)

Tu peux utiliser ce genre de manip:

1- tu lis l'unicode.
2- tu convertis l'unicode en Ascii avec des poke et des peek (
3- tu tris.


Pour le point 2 tu peux utiliser ce genre de code: (voir #PB_Ascii, #PB_UNICODE et #PB_UTF8 ...)

Code : Tout sélectionner

  If Len(chainedecaractere$)>0
    *mem=AllocateMemory(Len(chainedecaractere$)*4)
    PokeS(*mem,chainedecaractere$,-1,#PB_Ascii)
    chainedecaractere$=PeekS(*membase,-1,#PB_Ascii)
    FreeMemory(*mem)
  EndIf
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Répondre