Category:LSL Negative Index/fr

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Les indexs négatifs sont comptés à l'envers à partir de la fin. exemple : Si string s = "Hello World"

  • L'index 0 est'H' (llGetSubString(s,0,0))
  • L'index -1 est 'd' (llGetSubString(s,-1,-1))
  • L'index -5 est 'W' (llGetSubString(s,-5,-5))


Les indexs négatifs sont trés explicites. Le LSL les analyse comme s'ils étaient leur contrepartie positive.
Supposons que n_ind soit un index négatif pour str alors la forme positive de n_ind devrait être n_ind + llStringLength(str);
Supposons que p_ind soit un index positif pour str alors la forme négative de p_ind devrait être p_ind - llStringLength(str);

Une attention particulière doit être apportée lors de l'utilisation du résultat de llListFindList ou de llSubStringIndex en combinaison avec une fonction de cette catégorie. Ces fonctions renverrons un index -1 pour signaler 'non trouvé', alors que cette valeur correspond à un index (négatif) valide.

string s = "Hello World";

integer index = llSubStringIndex(s, "t");//index == -1
if(~index)//Idem que index != -1, mais plus rapide car'~' réalise un controle bit à bit
{
    s = llDeleteSubString(s, index, index);
}

Range Functions

List

String

Pour compliquer les choses, les fonctions nécessitant la saisie d'un périmètre suppose l'identification de deux indexs. Les indexs représentent les débuts et la fin du périmètre.

  • Si début <= fin alors le périmètre sur lequel travaillera la fonction est [début , fin ].
  • Si fin > début alors le périmètre sur lequel travaillera la fonction est [0, fin ] + [début , -1]

Les choses deviennent difficiles lorsque vous commencez à mélanger les indexs sur des strings et des lists de longueur différente. La modalité utilisée peut varier en fonction de la longueur. Il est important de garder cet aspect en tête lorsque vous mixez plusieurs indexs.

string bad(string in)
{
    return llGetSubString(in, 5, -5);
}

bad("Hello World!");//renvoie " Wo"
bad("Hello Cat!");//renvoie " C"
bad("Hello !");//renvoie "Hel !"