Category:LSL Negative Index/fr

From Second Life Wiki

Second Life Wiki > LSL Negative Index/fr
Jump to: navigation, search

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 !"
Personal tools
In other languages