3.2Tableaux, chaînes & types avancés
Au-delà des types simples, le WLangage propose des TYPES STRUCTURÉS indispensables dès qu'on manipule des ensembles de données en mémoire. (1) Le TABLEAU : une collection ordonnée d'éléments de même type, accessibles par un INDICE. On peut le parcourir (POUR TOUT), y ajouter (TableauAjoute), le trier, y chercher. Il existe des tableaux dynamiques (taille variable) et à plusieurs DIMENSIONS. (2) Le TABLEAU ASSOCIATIF : au lieu d'un indice numérique, chaque valeur est rangée sous une CLÉ (un texte, par exemple un code client). Très efficace pour retrouver une information sans parcourir toute la collection — idéal pour les correspondances et les caches. (3) La STRUCTURE : un type que VOUS définissez, regroupant plusieurs informations liées sous un même nom (une structure Adresse contenant rue, code postal, ville). Elle rend le code bien plus lisible qu'une poignée de variables éparses.
Les CHAÎNES DE CARACTÈRES occupent une place centrale en gestion (noms, adresses, références, fichiers d'échange). Les manipulations courantes : concaténer (assembler), extraire une portion, connaître la Taille, chercher une occurrence (Position), remplacer, passer en majuscules/minuscules, supprimer les espaces (SansEspace) et découper une chaîne en morceaux selon un séparateur — opération très utilisée pour lire des fichiers CSV ou des données importées. Deux points d'attention. (1) Les ACCENTS et caractères spéciaux : très présents en français, ils demandent de la vigilance lors des comparaisons, des tris et surtout des échanges de fichiers (encodage). (2) Les CONVERSIONS entre types (texte ↔ numérique ↔ date) sont une source classique d'erreurs : convertir une saisie utilisateur en nombre ou en date doit toujours s'accompagner d'un CONTRÔLE, car l'utilisateur peut saisir n'importe quoi.
Vocabulaire de la section
- Tableau
- Collection ordonnée d'éléments de même type, accessibles par INDICE. Dynamique (taille variable) ou à plusieurs dimensions. On l'ajoute, le parcourt, le trie, le recherche.
- Tableau associatif
- Collection où chaque valeur est rangée sous une CLÉ (souvent un texte) au lieu d'un indice numérique. Idéal pour retrouver une information sans parcourir toute la collection (correspondances, caches).
- Structure
- Un type que VOUS définissez, regroupant plusieurs informations liées sous un même nom (structure Adresse = rue + code postal + ville). Rend le code bien plus lisible que des variables éparses.
- Manipulation de chaînes
- Concaténer, extraire, Taille, Position (chercher), remplacer, majuscules/minuscules, SansEspace, et DÉCOUPER selon un séparateur — très utilisé pour lire des fichiers CSV ou des données importées.
- Conversions (⚠️)
- Passer d'un type à l'autre (texte ↔ numérique ↔ date) est une source classique d'erreurs : une conversion de saisie utilisateur doit TOUJOURS être accompagnée d'un contrôle.
Quand utiliser un TABLEAU ASSOCIATIF plutôt qu'un tableau classique ?
En pratique — Manipuler tableaux, structures et chaînes
- Créez un TABLEAU dynamique, alimentez-le (TableauAjoute) puis parcourez-le avec POUR TOUT ; testez le tri et la recherche.
- Utilisez un TABLEAU ASSOCIATIF pour une correspondance clé → valeur (code client → nom) : la recherche est directe, sans parcours.
- Définissez une STRUCTURE regroupant des informations liées (adresse complète) pour remplacer plusieurs variables séparées.
- Manipulez des chaînes : découpez une ligne CSV selon un séparateur, contrôlez et convertissez les valeurs (texte → numérique/date) avant de les exploiter.
Points clés à retenir
- Types structurés essentiels : le TABLEAU (collection ordonnée accessible par INDICE, dynamique ou multidimensionnel), le TABLEAU ASSOCIATIF (accès par CLÉ texte — retrouve une valeur sans parcourir, idéal pour correspondances et caches) et la STRUCTURE (type que vous définissez, regroupant des informations liées sous un même nom).
- Les CHAÎNES sont centrales en gestion : concaténer, extraire, Taille, Position, remplacer, casse, SansEspace, et surtout DÉCOUPER selon un séparateur (indispensable pour lire du CSV ou des données importées).
- ⚠️ ACCENTS et caractères spéciaux : très présents en français, ils demandent de la vigilance lors des comparaisons, des tris et surtout des ÉCHANGES DE FICHIERS (question d'encodage).
- ⚠️ Les CONVERSIONS de type (texte ↔ numérique ↔ date) sont une source classique de bugs : une saisie utilisateur peut contenir n'importe quoi. CONTRÔLEZ toujours avant de convertir et d'exploiter.
Questions fréquentes
Quand utiliser un tableau associatif plutôt qu'un tableau classique ?
Utilisez un tableau ASSOCIATIF quand vous devez retrouver une valeur par une CLÉ (un code, un identifiant) : l'accès est direct, alors qu'un tableau classique impose de parcourir tous les éléments — la différence devient énorme quand le volume ou le nombre de recherches augmente. Le tableau CLASSIQUE : (1) Principe : les éléments sont rangés par POSITION (indice 1, 2, 3…). (2) Idéal quand : l'ORDRE compte (une liste de lignes à traiter dans l'ordre), vous parcourez systématiquement tout le contenu, ou la position elle-même a un sens. (3) Limite : pour retrouver un élément par son contenu (« quel élément a le code CLI042 ? »), il faut PARCOURIR le tableau jusqu'à le trouver. Sur dix éléments, aucune importance. Sur dix mille, répété mille fois, c'est catastrophique. Le tableau ASSOCIATIF : (1) Principe : chaque valeur est rangée sous une CLÉ (souvent un texte : un code client, une référence, un identifiant). (2) Accès DIRECT : on demande la valeur associée à la clé, sans parcours. C'est l'avantage décisif. (3) Idéal pour : les tables de CORRESPONDANCE (code pays → libellé, code TVA → taux), les CACHES (mémoriser des informations déjà lues en base pour éviter de les relire), les regroupements/comptages par clé (compter les commandes par client), le dédoublonnage (vérifier si une clé a déjà été vue). (4) Limite : l'ordre n'est pas garanti comme dans un tableau indicé ; si vous avez besoin d'un ordre précis, prévoyez-le autrement. Le cas d'usage typique (le plus rentable) : (1) Vous parcourez cent mille lignes d'un import et, pour chaque ligne, vous devez retrouver le client correspondant à un code. (2) Mauvaise solution : lire la base à chaque ligne (cent mille accès), ou parcourir un tableau classique de clients à chaque ligne. (3) Bonne solution : charger UNE fois les clients dans un tableau ASSOCIATIF (clé = code client), puis, pour chaque ligne, récupérer directement la valeur. Le gain de performance est spectaculaire. (4) C'est le principe du CACHE en mémoire — l'une des optimisations les plus efficaces dans les traitements par lot. Comment choisir en pratique : (1) « J'ai besoin de retrouver par une clé » → tableau ASSOCIATIF. (2) « Je traite tout dans l'ordre » → tableau classique. (3) « Je fais beaucoup de recherches dans un ensemble » → associatif, sans hésiter. (4) « Les données viennent de la base et sont volumineuses » → attention : ne chargez pas tout en mémoire sans raison ; parfois une REQUÊTE bien indexée est la meilleure réponse. Le tableau associatif est un cache, pas un substitut à la base. (5) Pour de petites collections (quelques dizaines d'éléments), la différence est négligeable : prenez le plus lisible. Le principe général : (1) Adaptez la STRUCTURE DE DONNÉES à l'USAGE : parcours ordonné ou recherche par clé. (2) Un mauvais choix ne se voit pas sur un petit jeu de test, mais explose en production. En résumé : choisissez le tableau ASSOCIATIF dès que votre besoin est de RETROUVER une valeur par une CLÉ (code, identifiant, référence), car l'accès est DIRECT — là où un tableau classique oblige à parcourir les éléments un par un jusqu'à trouver, ce qui devient catastrophique quand la collection grossit ou que la recherche est répétée des milliers de fois. Le tableau classique reste le bon choix quand l'ORDRE compte ou que vous traitez systématiquement tout le contenu. Le cas d'usage le plus rentable est le CACHE en mémoire : plutôt que d'interroger la base ou de parcourir une liste pour chaque ligne d'un import de cent mille enregistrements, chargez une fois les données de référence dans un tableau associatif (clé = code) et récupérez ensuite directement chaque valeur — le gain est spectaculaire. Restez toutefois vigilant : un tableau associatif est un cache, pas un remplacement de la base, et il ne faut pas charger de gros volumes en mémoire sans raison, une requête bien indexée étant parfois la meilleure réponse. Sur de petites collections, prenez simplement la solution la plus lisible : le mauvais choix de structure ne se voit pas sur un petit jeu de test, mais se paie en production.
Pourquoi les conversions de types causent-elles tant de bugs ?
Parce qu'une conversion suppose que la donnée a le format attendu — or une saisie utilisateur, un fichier importé ou une donnée externe contiennent souvent autre chose : sans contrôle, la conversion échoue silencieusement ou produit une valeur fausse. Les situations à risque : (1) SAISIE utilisateur : l'utilisateur tape ce qu'il veut. « 12,50 » ou « 12.50 » (virgule ou point décimal), « 1 000 » avec un espace, du texte dans un champ numérique, une date « 03/04 » incomplète. Convertir sans vérifier donne zéro, une date absurde, ou une erreur. (2) Fichiers IMPORTÉS (CSV, texte) : tout y est du TEXTE. Chaque colonne doit être convertie, et les formats varient selon la source (séparateurs, formats de date, décimales). (3) Données EXTERNES (service web, autre application, base tierce) : on ne maîtrise ni le format ni la qualité. (4) Valeurs VIDES ou nulles : convertir une chaîne vide en numérique ou en date est un cas classique non traité. Le piège des DATES (le plus dangereux) : (1) Les formats varient : jour/mois/année en France, mois/jour/année ailleurs. « 03/04/2026 » est le 3 avril ou le 4 mars selon la convention. (2) Sur un import provenant d'un système étranger, cette ambiguïté produit des données FAUSSES mais plausibles — donc indétectables à l'œil. C'est l'un des bugs les plus sournois qui soient. (3) Précisez toujours le format attendu lors des conversions, et documentez-le pour les imports. Le piège des DÉCIMAUX : (1) Séparateur décimal virgule (usage français) ou point (usage anglo-saxon et informatique). (2) Séparateurs de milliers (espace, point, virgule selon les pays) qui font échouer la conversion. (3) Résultat typique : un montant converti à zéro, ou tronqué. Les bonnes pratiques : (1) CONTRÔLEZ AVANT de convertir : vérifiez que la valeur est bien numérique, que la date est valide, que la chaîne n'est pas vide. Ne convertissez jamais « en espérant ». (2) Traitez le cas d'ÉCHEC explicitement : message clair à l'utilisateur, ligne rejetée dans un import avec un compte-rendu, valeur par défaut assumée. Ne laissez jamais passer silencieusement. (3) PRÉVENEZ à la source : utilisez des champs TYPÉS et des masques de saisie (un champ de type date avec sélecteur évite l'essentiel du problème), des listes de choix plutôt que du texte libre. C'est la meilleure protection. (4) Pour les IMPORTS : documentez le format attendu, validez chaque ligne, produisez un RAPPORT (lignes acceptées, rejetées, motif) et ne stoppez pas tout au premier problème. (5) Attention aux ARRONDIS sur les montants : utilisez le type monétaire et maîtrisez les arrondis (un centime d'écart sur une facture est un vrai problème). (6) TESTEZ les cas limites : vide, zéro, valeurs extrêmes, formats inattendus, caractères accentués. En résumé : les conversions causent tant de bugs parce qu'elles reposent sur une HYPOTHÈSE de format que la réalité ne respecte pas — saisies utilisateur libres, fichiers importés entièrement textuels, données externes non maîtrisées, valeurs vides. Les deux pièges les plus dangereux sont les DATES (jour/mois/année contre mois/jour/année : « 03/04/2026 » change de sens selon la convention, ce qui produit des données fausses mais parfaitement plausibles, donc invisibles) et les DÉCIMAUX (virgule contre point, séparateurs de milliers, qui donnent des montants nuls ou tronqués). La règle est donc de CONTRÔLER AVANT de convertir — vérifier que la valeur est bien numérique, que la date est valide, que la chaîne n'est pas vide — et de TRAITER explicitement l'échec (message clair, ligne rejetée avec motif, valeur par défaut assumée) plutôt que de laisser passer silencieusement. Mieux encore, PRÉVENEZ à la source avec des champs typés, des masques de saisie et des listes de choix : un champ date avec sélecteur supprime le problème. Pour les imports, documentez le format attendu, validez ligne à ligne et produisez un rapport détaillé. Enfin, soignez les arrondis monétaires et testez systématiquement les cas limites.