• 02 Mai 2025, 12:08:25


Auteur Sujet: [TUTO] Les fonctions Str  (Lu 2848 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
[TUTO] Les fonctions Str
« le: 06 Septembre 2012, 18:00:50 »
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).

Code: (PAWN) [Sélectionner]
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 :

Code: (PAWN) [Sélectionner]
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 :

Code: (PAWN) [Sélectionner]
strcmp Ca je vous ai deja expliquer, c'est la fonction strcmp, qui va comparer deux texte(Ou variables) avec des options a definir.
Code: (PAWN) [Sélectionner]
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.
Code: (PAWN) [Sélectionner]
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.

Code: (PAWN) [Sélectionner]
if(strcmp("Hihihi","ihihiH",true)==0)
{
     code...
}
Ce code ne marchera pas, etant donné que "Hihihi" n'est pas egal a "ihihiH"

Code: (Pawn) [Sélectionner]
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 :

Code: (PAWN) [Sélectionner]
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 :

Code: (PAWN) [Sélectionner]
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;
}

Code: (PAWN) [Sélectionner]
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).
Code: (PAWN) [Sélectionner]
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)

Code: (PAWN) [Sélectionner]
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 :

Code: (PAWN) [Sélectionner]
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 :
Code: (PAWN) [Sélectionner]
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 :
Code: (PAWN) [Sélectionner]
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
Code: (PAWN) [Sélectionner]
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 :
Code: (PAWN) [Sélectionner]
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 :
Code: (PAWN) [Sélectionner]
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

Code: (PAWN) [Sélectionner]
strdel La fonction strdel
Code: (PAWN) [Sélectionner]
(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 !

Code: (PAWN) [Sélectionner]
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 :

Code: (PAWN) [Sélectionner]
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 ! ICI




Le 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 :

Code: (PAWN) [Sélectionner]
new test[128] = "Salut";
strcat(test, " mon pote!");

test vaut maintenant "Salut mon pote!"
Prenons un autre exemple :
Code: (PAWN) [Sélectionner]
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
« Modifié: 07 Septembre 2012, 15:50:13 par KonVict92x »

[/url]

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [TUTO] Les fonctions Str
« Réponse #1 le: 06 Septembre 2012, 18:13:39 »
Bonne initiative par contre je trouve que ce n'est pas très très clair.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Xolokos

  • PAWN/XHTML/CSS/PHP/SQL/JS
  • *
  • Grand Banditisme
  • What are you waiting for ?
  • Messages: 681
    • Voir le profil
Re : [TUTO] Les fonctions Str
« Réponse #2 le: 06 Septembre 2012, 18:21:18 »
Idem que Ssk je trouve ça pas très clair mais c'est déjà un début approfondis ?
Nippah !

Hors ligne Diablo62

  • *
  • Bandit
  • Script seulement pour m'amuser :)
  • Messages: 305
    • Voir le profil
Re : [TUTO] Les fonctions Str
« Réponse #3 le: 06 Septembre 2012, 18:49:59 »
Salut.

Je vais rejoindre les autres en disant que l'initiative du Tutos est bien venu, mais la compréhension est difficile.

Personnellement quand j'essaye d'expliquer quelque chose à une personne, je me dis que cette personne n'y connais absolument rien ou qu'elle est la plus bête du monde (même si je sais que c'est faux). En faisant ça, je m'efforce de donner beaucoup de détails et d'essayer d'y aller point par point sans vouloir aller trop vite afin que se soit le plus clair possible.

Ici par exemple, je trouve que tu passes trop rapidement d'un point à un autre ce qui rend donc l'explication pas très clair.
Mais bon, je sais que tu arriveras à le modifier ;)
Merci à Colonel Marco pour la Signature

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [TUTO] Les fonctions Str
« Réponse #4 le: 06 Septembre 2012, 19:36:33 »
Ce serait cool mais si notre boulot est gâché par les bots comme sur notre dernier wiki, c'est inutile.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : [TUTO] Les fonctions Str
« Réponse #5 le: 06 Septembre 2012, 20:21:43 »
J'ai essayer d'etre plus clair, dites le moi si quelquechose n'est pas assez precis. Je suis aussi en train d'ajouter les autre fonctions.

[/url]

Hors ligne Diablo62

  • *
  • Bandit
  • Script seulement pour m'amuser :)
  • Messages: 305
    • Voir le profil
Re : [TUTO] Les fonctions Str
« Réponse #6 le: 07 Septembre 2012, 01:06:48 »
Je n'ai pas tout regardé le Tuto (je le ferais sans doute demain), mais le peu que j'ai vu est déjà plus intéressant que tout à l'heure ;)

@Gzsume :  Ce genre de choses peut être vraiment intéressant si tout le monde y met du sien. Par contre, en fin de compte cela ressemblera un peu au Samp Wiki non ? (enfin, même si celui là sera en Fr ou qu'il comportera plus d'explication).
En section blabla, il y avait un projet de faire un Gm (ou quelque chose dans le genre) ouvert à tous, mais depuis plus de nouvelle.

Si certaines règles sont définis (façon de rédiger, éviter de supprimer un post complet d'un copain pour la refaire soit même,...), je veux bien y participer.
Même si j'ai encore des choses à apprendre, je ne me considère pas comme un apprenti ou un débutant. Je pourrais donc sans doute réussir à faire quelques lignes ;)
Merci à Colonel Marco pour la Signature

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : [TUTO] Les fonctions Str
« Réponse #7 le: 07 Septembre 2012, 01:41:56 »
Ce serait cool mais si notre boulot est gâché par les bots comme sur notre dernier wiki, c'est inutile.

Limité aux utilisateurs du forum, c'est très facile de lier les deux, un peu de bricolage et c'est bon !

Hors ligne Diablo62

  • *
  • Bandit
  • Script seulement pour m'amuser :)
  • Messages: 305
    • Voir le profil
Re : [TUTO] Les fonctions Str
« Réponse #8 le: 07 Septembre 2012, 13:34:35 »
@Gzsume : Il faudrait créer un nouveau Topic pour qu'on puisse en parler plus facilement plutôt que de partir en HS dans ce Topic  :P

@KonVict92x : J'ai vu que tu avais modifier ton Tuto aujourd'hui.
Par contre, pourrais-tu mettre un peu plus en avant la différence entre strins et strcat (mettre par exemple en Gras que strcat se place à la fin). Tu pourrais par exemple remettre l'exemple du Tag [afk] qui se placerait après le pseudo.

Dans ta fonction strdel, tu as noté ceci :
Citer
strdel(string, 0, 37); //La variable "string vaut maintenant "this" vu que il a tous supprimer sauf le mot commencant au 37eme caractere
this commence au 38è caractère ;)

Sinon, je trouve que tu n'as pas assez parler du strval (tu as mis à peine une ligne). Selon moi, c'est une fonction relativement importante car on est amené à s'en servir très souvent (Mettre une couleur définie sur un veh, donner de l'argent, kicker le joueur N°, donner des munitions,...).

EDIT : Pour le strmid, tu pourrais par exemple dire que ça permet d'extraire dans la fiche du Personnage/veh des infos (le Mdp du joueur, le nom du Propriétaire du Veh, la plaque d'immatriculation,...)
« Modifié: 07 Septembre 2012, 14:05:24 par Diablo62 »
Merci à Colonel Marco pour la Signature