Blog Emmanuel Orchanian

astuce bdd bureautique codage culture débat design énigme français hacking html mathématiques méthodologie santé typographie 

 

 [201 vues] 2022-02-15 Emmanuel Orchanian

NOTE : cet article a été affiché dans sa langue originale.

Problème

Si vous avec un ancien système d'exploitation ou que vous codez innocemment des nombres, de cette manière là :


    $a = [
    'dossier 1',
    'dossier 2',
    'dossier 3',
    'dossier 4',
    'dossier 5',
    'dossier 6',
    'dossier 7',
    'dossier 8',
    'dossier 9',
    'dossier 10',
    'dossier 11'] ;

    sort($a); // trier le tableau

Il se peux que vous tombez sur le problème stupide suivant :

    'dossier 1',
    'dossier 10',
    'dossier 11',
    'dossier 2',
    'dossier 3',
    'dossier 4',
    'dossier 5',
    'dossier 6',
    'dossier 7',
    'dossier 8',
    'dossier 9'

La différence entre les chiffres et les lettres

L'ordre alphabétique

Consiste à prendre la lettre la plus à gauche, si deux lettres sont les mêmes, alors on prends la seconde lettre.

    Corine     Arthur     Arthur
    Roméo      Corine     Camille
    Arthur     Camille    Caroline
    Camille    Matthieu   Matthieu
    Zara       Roméo      Roméo
    Matthieu   Zara       Zara

L'ordre numérique

Ranger des nombres du plus petit au plus grand consiste à d'abord donner la même longueur à chaque nombre en rajoutant des zéros à gauche avant de les considérer de la même manière à les ranger dans l'ordre alphabétique

    32     032     032 032  008
    122    122     122 008  032
    8      008     008 122  122

(petite parenthèse : sur machine à écrire, la lettre O était aussi le chiffre zéro, et la lettre I était le chiffre 1. Ainsi les chiffres n'allaient que de 2 à 9)

D'où vient le problème du 11 avant le 2 ?

Vous l'avez sans doute deviné, le 11 viens avant le 2 car l'ordinateur ne considère par 11 et 2 comme des nombres, mais comme des mots...

En d'autres termes, lors du rangement, il ne rajoute pas des zéros à gauche :

    32   122
    122  32
    88   8

Si vous avez du mal à comprendre, remplacez dans votre têtes les chiffres par des lettres, par exemple

    0 = a
    b = 1
    c = 2 ...
    32   dc    dc   bcc  122
    122  bcc   bcc  dc   32
    8    i     i    i    8

Même exemple avec 1, 2 et 11

    1   b   b   b   1
    2   c   c   bb  11
    11  bb  bb  c   2

Comment résoudre ce problème ?

C'est un problème souvent résolut pour les logiciels publics

Souvent, c'est déjà résolu ! Par exemple dans Windows, avant il y avait ce souci avec les noms de dossier et de fichier, à présent essayez, vous verrez que le problème n'existe plus.

windows ordre numérique
Le problème dans Windows n'existe plus depuis longtemps

Cependant, il est toujours présent par exemple dans l'utilisation de certains serveurs ou le fonctionnement interne de logiciels, alors comment faire ?

Ajouter des zéros devant les nombres

    REMPLACEZ     PAR
    1             0001
    2             0002
    3             0003
    ...
    9             0009
    10            0010
    11            0011
    ...
    101           0101
    102           0102
    103           0103

Attention, le nombre de zéro défini votre maximum, c'est-à-dire commencer avec trois zéros, "0001" indique que 9999 sera votre plus grand nombre, disons 10 000 c'est pareil...

Si vous ne mettez que un seul zéro, vos fichiers seront bons que jusqu'à 100... et 100 ce n'est pas beaucoup, il vaut mieux sur-estimer les nombres à l'avenir plutôt que les sous-estimer.

Parce ce que si vous visez mal, cela signifie que vous rajouterez un 0 devant 100 fichiers ? Jamais de la vie !

Personnellement j'en met trois, ainsi j'ai 10 000 possibilité je ne stresse pas.

Utiliser le tri "naturel"

Il existe 3 tris :

  1. le tri alphabétique
  2. le tri numérique
  3. le tri naturel

Le tri naturel est un tri plus récent, il est alphabétique sur les textes, de telle sorte que si on tombe sur des nombres dans le texte, on le range dans l'ordre numérique.

En d'autre terme c'est un tri compliqué point de vue ordinateur, et c'est le tri naturel que ferait un être humain.


    natsort($tableau);

La fonction natsort($tableau) de PHP permet d'effectuer le tri naturel.

Je conseille aux programmeurs de vérifier si leur algorithme de tri de fais pas naïvement un tri alphabétique/numérique, et de préférer chercher la méthode qui effectuerai un tri naturel.

On néglige le problème

En informatique, si on a un problème, une manière de le résoudre est de décider qu'on le laisse comme il est ! 😃 Puis on s'habitue à le voir 1,10,11,2,3,4...

  1. C'est pratique
  2. C'est rapide, pour ne pas dire instantané
  3. C'est pas cher, dans le sens c'est gratuit
  4. C'est rentable
  5. Ça marche souvent
  6. C'est de la résilience, de la sagesse (bon OK j'arrête 😁)

Merci d'avoir lu !
Si en général vous avez une question, une curiosité, n'hésitez pas me contacter.