Aller au contenu principal

Texte

La concaténation exige du Text des deux côtés​

+ joint deux Text. "Count: " + 5 ne donne pas "Count: 5". C'est le repli des types mélangés : l'Integer 0. Convertissez d'abord les nombres, les Bool et les handles en Text avec StringFormat.

StringFormat(format, value0, value1)​

  • Remplace chaque {0} par value0 et chaque {1} par value1. Chaque valeur peut être de n'importe quel type. Il n'y a pas de {2} ni de spécificateurs de format comme {0:N2}.
  • Elle prend toujours trois arguments. Passez "" pour une valeur inutilisée : StringFormat("{0} items", n, "").
  • Pour plus de deux valeurs, imbriquez les appels ou concaténez les résultats (voir l'exemple ci-dessous).
  • Un Real s'affiche toujours avec six décimales (0.500000). Arrondissez-le d'abord en Integer pour un nombre entier, ou mettez-le à l'échelle (MathRound(r * 100)) pour une sortie en virgule fixe.
  • {0} est remplacé avant {1} : si le texte de value0 contient lui-même {1}, celui-ci est remplacé aussi.
w = WindowGetActive();
s = StringFormat(StringFormat("{0} x {1} at ", WindowGetWidth(w), WindowGetHeight(w)) + "({0}, {1})",
WindowGetX(w), WindowGetY(w));
UtilityPrint(s); // par ex. 1280 x 720 at (100, 80)

Mesurer, rechercher, extraire​

  • StringGetLength compte des unités de code UTF-16, pas des caractères. Un emoji situé hors du plan multilingue de base compte pour 2.
  • StringGetIndexOf(text, search) donne un index à partir de 0, ou -1 lorsque search est introuvable. Elle est sensible à la casse, et il n'existe pas de « dernier index de » (parcourez avec une boucle).
  • StringGetSubstring(text, start, length) : start part de 0. Une length qui dépasse la fin est tronquée, et un start situé à la fin ou au-delà donne "". Un start ou une length négatif est une erreur et arrête l'action.
  • Il n'y a pas de syntaxe d'indexation (s[0]). Utilisez StringGetSubstring(s, i, 1) pour un caractère.
  • StringContains, StringStartsWith, StringEndsWith et StringReplace sont exactes et sensibles à la casse. Pour un test insensible à la casse, mettez d'abord les deux côtés en minuscules.
  • StringToUpper/StringToLower suivent les règles de casse des paramètres régionaux de l'utilisateur : le i avec et sans point du turc est donc correctement traité.
  • StringTrim supprime les espaces aux deux extrémités, y compris le \r laissé par les fins de ligne Windows \r\n.
  • StringReplace et StringSplit arrêtent l'action si le texte recherché ou le délimiteur est vide.

Le découpage est un cache que vous lisez par index​

Une valeur ne peut pas contenir de liste : StringSplit(text, delimiter) stocke donc les parties dans le contexte du script en cours et renvoie leur nombre. Lisez chaque partie avec StringGetSplitPartAt(i) ; un index hors limites donne "". Le StringSplit suivant du même script remplace ce cache : copiez donc une partie dans une variable avant de découper autre chose. Toute fonction intégrée …EnumerateAll, …FindAll… ou …GetAll…, associée à sa fonction de lecture …EnumeratedAt, fonctionne de la même manière.

Comparer du texte​

== est exact et sensible à la casse. </> comparent de façon ordinale par unité de code UTF-16, ce qui n'est pas l'ordre du dictionnaire : toutes les lettres ASCII majuscules sont triées avant toutes les minuscules, et les lettres accentuées après z. Ne présentez pas cet ordre à un utilisateur comme un ordre alphabétique.