> Tech > Parlons de SORTA

Parlons de SORTA

Tech - Par iTPro - Publié le 24 juin 2010
email

Je ne peux pas écrire un article sur le tri sans tester SORTA, l’opcode de tri intégré de RPG. Avant la V5R3, il était difficile d’utiliser SORTA parce que, entre autres, il triait toujours toute la matrice au lieu de ne trier que les éléments non vierges. Cela a été

Parlons de SORTA

corrigé en V5R3 par l’introduction de la fonction intégrée (BIF, built-in function) %SUBARR. Comme j’utilise la V5R3 sur mon système, j’ai utilisé %SUBARR dans mes tests pour que les résultats soient les plus rapides possibles.

SORTA a pour autre inconvénient de ne pas agir sur une matrice de structure de données. Donc, pour trier une structure de données multichamp, il faut créer une matrice à l’intérieur d’une structure de données puis utiliser OVERLAY pour recouvrir chaque champ. Le renvoi A de la figure 3 montre une structure de données ainsi définie. On peut voir en B de cette même figure que cela facilite le tri sur un champ particulier dans la matrice.
Malheureusement, cette technique pose un gros problème: une structure de données nommée ne peut pas dépasser 65 535 octets. Comme mes données ont une longueur de 69 octets, je ne peux avoir que 949 éléments dans une matrice ainsi déclarée. Si je veux tester des matrices de 1000 ou 10 000 éléments, cette méthode ne conviendra pas !

Une structure de données non nommée permettrait de plus grandes matrices, mais elle ne fonctionnera pas non plus dans ce cas parce que j’utilise un pointeur pour recouvrir la matrice de structure de données, et des structures de données non nommées ne peuvent pas être basées sur un pointeur.
Heureusement, il existe un plan B: je peux créer une matrice « plate » (c’est-à-dire, une matrice ne contenant aucun champ) et placer le champ Sort By au début. Comme je n’ai plus besoin de faire tenir le résultat dans une structure de données, je peux fournir une plus grande matrice à l’opcode SORTA.
Mais il me faudra copier les données dans la matrice à chaque fois (parce que les données clé peuvent être différentes à chaque tri), donc cette méthode de tri de mon sous-fichier ne fonctionnera pas aussi bien.

SORTA présente deux gros avantages : elle est intégrée en RPG et est simple d’emploi. Son point faible est son manque de souplesse. Elle est meilleure qu’en RPG III ou même qu’en V5R2, mais c’est encore l’une des méthodes les plus rigides qui soient. On ne peut pas l’utiliser sur une matrice de structure de données. Elle est difficile à utiliser sur un espace utilisateur ou sur de la mémoire allouée à partir du tas. Il est difficile d’effectuer un tri insensible à la casse (majuscules/minuscules). Cela dit, mes résultats de test, sur lesquels je reviendrai plus en détail dans la suite de cet article, montrent toute son efficacité pour trier une petite matrice.

Téléchargez gratuitement cette ressource

TOP 5 Modernisation & Sécurité des Postes Clients

TOP 5 Modernisation & Sécurité des Postes Clients

Pour aider les entreprises à allier les restrictions liées à la crise et la nécessaire modernisation de leurs outils pour gagner en réactivité, souplesse et sécurité, DIB-France lance une nouvelle offre « Cloud-In-One » combinant simplement IaaS et DaaS dans le Cloud, de façon augmentée.

Tech - Par iTPro - Publié le 24 juin 2010