Bonjour a tous et a toutes, j'aimerai vous presenter ce tuto sur le Str ! (Str car toutes les fonctions que je vais cité commencent par "str" donc soyons logique ! :D)Tous d'abord avant de commencer quoique ce soit, vous devez inclure le code que je vais vous donner dans la fin ou le debut de votre script (Ou dans un coin pas trop visible) ou optionellement en faire une include (Choisisez la 1er option pour les debutants).
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
stock strrest(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[128];
while ((index < length) && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Je vais commencer par
le strcmp. Le strcmp sert a comparer (d'ou le "cmp") deux chaine de caractère et voir si un est egal a l'autre, selon certains options a definir.
Voici deux simple exemple :
new texte1[7] = "Salut !";
new texte2[7] = "Salut !";
if(strcmp(texte1, texte2,true)==0)
Ici nous comparons si
texte2 est egal a
texte1 (Peu importe l'ordre)
Passons aux explications :
strcmp
Ca je vous ai deja expliquer, c'est la fonction strcmp, qui va comparer deux texte(Ou variables) avec des options a definir.
texte1, texte2
Les deux 1er parametres, le 1er defini la chaine de caractere de base (Remplacable par une variable), le deuxieme est la chaine de caractere(Aussi remplacable par une variable) qu'on va comparer. En gros, on va verifier si la 2eme chaine de caractere (ou le texte) ressemble a la 1ere. En d'autre termes : Si texte2 vaut texte1, on fait l'action.
true
Le 3eme parametre. Si ce parametre est sur true (True = vrai, false = faux) alors nous ne compareront pas les majuscule(Elle seront ignorés). Si il est sur false et que
texte1 = "SaLuT !" et
texte2 = "salut !" alors la le code ne sera pas executer.
if(strcmp("Hihihi","ihihiH",true)==0)
{
code...
}
Ce code ne marchera pas, etant donné que "Hihihi" n'est pas egal a "ihihiH"
if(strcmp("Hihihi","hihihi",false)==0)
{
code...
}
Ce code ne marchera pas non plus, etant donnée que les majuscules ne sont pas ignorés et que "hihihi" n'a pas de majuscule au depart comme le 1er caractere.
Ca n'en a pas l'air mais le strcmp peut beaucoup vous servir. En particulier pour creer des commandes
Exemple :
if(strcmp(cmd,"/macommande",true)==0)
{
code...
}
Pas besoin d'explications !
Autre utilité impressionante du strcmp : Creer des commandes avec argument (Explications plus bas) et detection de texte (ou plutot comparaison).
Explications :
Une commande avec argument est (pour moi) une commande qui prend en compte le texte apres le "/macommande ICI" .Ca ne se fait pas par magie, pour faire ca il faut remplacer le "cmdtext" de "if(strcmp(
cmdtext,"/macommande",true)==0)" et le remplacer par un simple "cmd" que vous devez creer dans la CallBack OnPlayerCommandText et aussi creer un "idx". Je ne peux vous fournir des informations sur le "idx" en raison de mes faibles connaissances. Mais je peux vous dire que "cmd" vaut la 1er chose ecrite (Le "/macommande" si vous preferer). Voici la methode :
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[128], tmp[128],idx;
cmd = strtok(cmdtext, idx);
if(strcmp([u][b]cmd[/b][/u],"/macommande",true)==0)
{
tmp = strtok(cmdtext, idx); //Le nom est changeable, juste le "tmp", rien d'autre.
new id = strval(tmp); //Le strval est obligatoire ! Grace a ce code, id vaudra tmp et donc si je tape "/macommande 2" id vaudra 2
return 1;
}
return 0;
}
cmd,"/macommande"
Si /macommande est egal a cmd et donc si cmd est egal a ma commande(Et inversement :D), nous ferons ce qui est prevu de faire(Ici , rien :D).
tmp = strtok(cmdtext, idx);
Ici
tmp vaudra la 1er chose ecrite apres le "/mycommand ICI"
Donc si je fait "/macommande coucou" tmp vaudra "coucou" et je pourrais le transferer vers une autre variable(ou directement m'en servir grace au
strval(tmp) (voir plus bas) :D)
new id = strval(tmp);
Ici j'utilise la fonction strval, qui permet de mettre le contenu d'une variable qui recupere le texte apres le "/mycommand ICI" dans une autre variable. Donc ici ci je marque "/mycommande 0"
id vaudra 0 ! (info 5 lignes plus bas)
Le strval permet de transferer le contenu d'une variable (pas une simple variable) dans une autre. Le type de variable doit etre utiliser par le strtok, un simple exemple pris plus haut pour vous expliquer :
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[128], tmp[128],idx; //Je vous conseille fortement de lui laisser 128 caracteres, mais faites comme vous voulez.
cmd = strtok(cmdtext, idx); //Recupere "/macommande"
if(strcmp([u][b]cmd[/b][/u],"/macommande",true)==0)
{
tmp = strtok(cmdtext, idx); //C'est ce type de variable la, (Cette variable va recuperer le texte apres le "/macommande"
new id = strval(tmp); //Le strval est obligatoire ! Grace a ce code, id vaudra tmp et donc si je tape "/macommande 2" id vaudra 2
return 1;
}
return 0;
}
Nous parlons de ce type de variable :
tmp = strtok(cmdtext, idx); //C'est ce type de variable la, (Cette variable va recuperer le texte apres le "/macommande"
Et nous pouvons l'inserer grace a :
new id;
id = strval(tmp);
Retournons au strcmp, voulez-vous. >:(
Si jamais je veux recuperer la deuxieme chose apres le "/mycommande Blabla ICI" je doit donc faire
new tmp[128];
new variable[128];
tmp = strtok(cmdtext, idx);
variable = strtok(cmdtext, idx);
Tmp vaudra "BlaBla", et
variable vaudra "ICI"
Soyons un peu plus precis :
new cmd[128], idx;
cmd = strtok(cmdtext, idx);//Recupere "/macommande"
if(strcmp(cmd,"/macommande",true)==0)
{
new tmp, tmp2, tmp3, tmp4;
tmp = strtok(cmdtext, idx);
tmp2 = strtok(cmdtext, idx);
tmp3 = strtok(cmdtext, idx);
tmp4 = strrest(cmdtext, idx);
return 1;
}
Imaginons que le joueur ecrive "/macommande salut ca va copain ? Hihihi lol"
Alors
cmd vaudra "/macommande"
Alors
tmp vaudra "salut"
tmp2 vaudra "ca"
tmp3 vaudra "va"
tmp4 vaudra "copain ? Hihihi lol"
En effet le strrest permet de recuperer tous les mots apres la derniere chose recuperer (Ici, la derniere chose est "va") (Et en effet, si rien n'est recuperer au depart il prendra tous, le goinfre ! :D)
Maintenant passons au strfind !
Le strfind comme son nom l'indique permet de "find" (trouver) tous le contenu d'une variable(Ou du texte) dans une autre ! N'est ce pas merveilleux ?
Exemple :
new texte1[11] = "Salut ca va ?";
new texte2[5] = "Salut";
if(strfind(texte1, texte2,true)==0)
Ici si il trouve tous le contenu de
texte2 dans un coin de
texte1 (peu importe l'endroit ou c'est placer) il fait ce qu'on lui indique. C'est la meme formulation et les meme parametres que strcmp en remplacant "cmp" par "find" ! N'est-ce pas merveilleux ? :D
Le strdel comme son nom l'indique permet de supprimer tous une partie designer. Mais ce n'est pas aussi simple que prevu, voici l'exemple du wiki :
new string[42] = "We will delete everything apart from this";
strdel(string, 0, 37); //La variable "string vaut maintenant "this" vu que il a supprimer tous entre le caractere 0 et 37
(Dites le moi si je me trompe, je n'ai jamais utiliser le strdel)
Explications :
new string[42] = "...";
Creer la variable
string avec comme contenu le texte plus haut
strdel
La fonction strdel
(string, 0, 37)
Tous ce qui est entre le caractere 0 et 37 sera supprimer (Les espaces comptent) et donc seul les choses avant le 1er chiffre(ici 0 donc rien) et apres le deuxieme (37) seront epargner.
Le strins permet d'inserer cette fois ci le contenu d'une variable, dans une autre. Ici aussi nous allons prendre l'exemple du wiki !
new pName[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
strins(pName, "[AFK]", 0);
SetPlayerName(playerid, pName);
Pour faire simple et court, le strins va inserer "[AFK]" a l'endroit du caractère 0 du contenu de "pName" (Donc tous au début) et donc si je remplace le 0 par un 1 [AFK] sera placer apres apres le 1er caractere du contenu de pName ce qui donnera si mon pseudo est "GTAONLINE" "G[AFK]TAONLINE" .
Le strlen sert a recuperer le nombre de caractere que contient une variable. Quel utilité me direz vous ? Cela permet de detecter si le joueur a ecrit quelquechose. Exemple :
new tmp[4] = "Hoyo"; //4 Caractere sont present
if(strlen(tmp) == 0) //Si tmp vaut 0 caracteres (En gros si rien est inscrit)
Autre exemple d'utilisation :
new tmp[128] = "test test test test", vartest; //16 caracteres + 4 espaces (Donc 20 caracteres)
vartest = strlen(tmp); //Ici, vartest vaudra 20
Ce tuto n'est pas encore fini (par faute de temps, mais je vais le continuer) et d'autre fonction existent. Si vous voulez tous savoir, le wiki est la pour vous !
ICILe strmid permet lui d'extraire une partie de texte, pour peut-ètre la mettre dans une variable.
Exemple :
strmid(string, "Extract 'HELLO' without the !!!!: HELLO!!!!", 34, 39);
Exmplications :
strmid
La fonction strmid permettant d'extraire du texte.
(string,
Le nom de la variable ou va aller le texte extrait.
, 34, 39)
Tous ce qui sera entre le caractere 34 et 39 sera extrait.
Autre exemple :
strmid(variable ou sera stocké ce qui sera extrait, Texte/variable qui sera extrait, caractere de commencement, fin, taille maximal);
Le strcat permet lui d'inserer tous le contenu d'une variable ou d'un texte
dans la fin d'une variable.Exemple :
new test[128] = "Salut";
strcat(test, " mon pote!");
test vaut maintenant "Salut mon pote!"
Prenons un autre exemple :
new pName[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
strcat(pName, "[AFK]");
SetPlayerName(playerid, pName);
Le nom du joueur sera maintenant "SONPSEUDO[AFK]" . Si son pseudo est "GTAONLINE" il sera maintenant "GTAONLINE[AFK]"
Les parametres :
( dest[] ,const source[] ,maxlength=sizeof string )
(variable ou sera inserer le texte, ce qu'il y a a inserer, Taille Maximum de caractere)
C'est ici que s'acheve ce tutoriel sur les fonctions str, pour avoir plus d'info dessus, faites un tour sur le
wiki de samp