Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Tous | Tutoriels du Mercredi | Basic Casio | C/C++/ASM | LuaFX | Graphisme | Transferts | Logiciels | Diverses astuces

Calculatrice
Toutes
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC

Retour à la liste des tutoriels
Tutoriel Casio : TDM 03 : Utiliser les chaînes de caractères !
Tutoriel rédigé le : 2018-09-02 17:00  par Drak  Catégorie : Tutoriels du Mercredi  Calculatrice : Toutes

Discutez de ce tutoriel sur le forum >> Voir le sujet dédié (27 commentaires)

TDM 03 : Utiliser les chaînes de caractères !
Le Tuto Du Mercredi [TDM] est une idée qui fut proposée par Ne0tux. Voici le principe : un mercredi sur deux, nous postons un petit tutoriel sur l'Utilisation de la calculatrice, le Transfert, la Programmation, ou encore la Conception de jeu. Je vous en présente la troisième édition.

Apprendre à se servir des chaînes de caractères (Str) ! (Débutant)

Niveau : ★ ★ ☆ ☆ ☆


Une chaîne de caractère, c'est comme une phrase. Lorsque vous écrivez, vous assemblez des lettres et des signes de ponctuations, des chiffres parfois ou encore d'autres caractères spéciaux. Alors qu'une variable comme A ou θ contient une valeur numérique, les Str – chaînes de caractères, ou string en anglais – contiennent des suites de lettres et de chiffres, des mots, des phrases, etc. Elle sont bien trop peu utilisées dans la plupart des programmes du site, surtout chez les programmes débutants ou les programmes de cours, alors qu'elles peuvent se révéler extrêmement efficaces.

Partie I : Qu'est-ce qu'une Str ?

NB : Ce TDM se veut complémentaire à un cours déjà existant sur l'utilisation des Chaînes de caractères par Totoyo. N'hésitez pas à le consulter également si vous ignoriez jusqu'à présent l'existence des Str.

Comme indiqué dans l'introduction, une chaîne de caractères (Str) contient... des caractères. Des caractères peuvent être des lettres en bas de casse ou capitale, des chiffres, des signes de ponctuations, des espaces, des lettres grecques, des signes mathématiques, et tout autre caractère spécial. Tout ce que vous seriez susceptible d'écrire avec votre clavier, en somme.

Attention toutefois, une Str N'EST PAS une valeur numérique. Toute tentative de calcul entre une Str et une valeur numérique provoquerait une erreur. Il existe cependant des techniques qui permettent de passer d'une Str à une valeur numérique et vice-versa.

Les chaînes de caractère peuvent avoir de nombreuses utilités. Elles peuvent être utilisées pour les programmes de cours, pour les dialogues dans un jeu, pour contenir le nom du joueur ou d'autres informations, et peut avoir des utilisations qui vont même bien au-delà de ce que vous pourriez imaginer : hardcoder des maps pour un jeu, stocker des données sur des monstres ou des attaques dans le code, ou même contenir des caractères qui décrivent des valeurs numériques... Avec un peu d'imagination, tout est possible !

Retenez bien que le premier caractère d'une chaîne est indexé à 1, et non pas à 0. Retenez également qu'une Str ne peut pas contenir plus de 255 caractères. Sachez également qu'un caractère prend 1 voire 2 octets, alors qu'une variable dans une liste en prend 12, voire 24. Employer les Str peut s'avérer très utile à cet endroit-là aussi.


Partie II : Initialiser les Str

Sachez qu'il existe de nombreuses fonctions qui permettent de manipuler les Str. La première chose à savoir faire est d'initialiser une Str comme il se doit. Voici différentes méthodes :
"Bonjour Mister 2 !" → Str 1
Str 2 → Str 1
? → Str 1 //Ce que rentre l'utilisateur va dans Str 1. Utile pour demander le nom du joueur par exemple.

Il existe des cas plus particuliers :
List 1[0] → Str 1
Exp►Str(Y1,Str 1)
La première ligne fonctionne dans les deux sens. Référez-vous au TDM précédent. La deuxième ligne est assez particulière et fait appel à une technique expliquée dans ce tutoriel. Vous n'aurez probablement pas à vous en servir.

Attention toutefois. Les techniques suivantes ne fonctionnent pas :
A → Str 1 //A est une valeur numérique, pas une Str.
"Hello world!"
Str Ans → Str 1 // Str Ans n'existe pas.
BONJOUR → Str 1 //BONJOUR n'a pas de guillemets : il sera considéré comme le produit des variables B, O, N, J, O, U et R. Donc, une valeur numérique.
Hello world!" → Str 1 //Bien sûr, erreur syntaxe s'il manque un guillemet.
Str 2 + A + ", je te love !" → Str 1 //Même délire : A est une valeur numérique.
StrJoin( Str 2, A) → Str 1 //Même problème qu'au dessus.
//Etc.

"Je suis :" → Str 1 //Ne dysfonctionne pas forcément mais peut provoquer des erreurs inattendues : l'interpréteur basic peut considérer le double-point comme un saut de ligne. Soyez vigilants en débugant votre programme si vous faites cela.


Partie III : Manipuler les fonctions pour les Str

Comparer deux Str : StrCmp(
StrCmp( compare chaque caractères des deux chaînes à la suite en partant, bien sûr, du premier caractère à gauche, jusqu'à ce que les deux caractères comparés soient différents. Pour les chiffres et les lettres, voici un ordre croissant pour StrCmp :
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

//Voici d'autres cas :
StrCmp("CAKE", "CAKEISALIE") //"CAKE" < "CAKEI". Renvoie -1
StrCmp("5", "5-") // "5" < "5-", donc renvoie -1.

Inverser une Str : StrInv(
Cette fonction inverse simplement l'ordre des caractères de la chaîne. Peut s'avérer amusant.
StrInv("Bonjour !") → Str 1
// Str 1 contient "! ruojnoB".

Concaténer (assembler) deux Str : StrJoin(
StrJoin( sert à fusionner deux chaînes de caractères. Toutefois, elle ne peut pas fusionner plus de deux Str en même temps : cette fonction ne prend que deux paramètres.
"BALDI" → Str 1
StrJoin("Bonjour, ", Str 1) → Str 1
//Str 1 contient "Bonjour, BALDI"
/!\ Cette technique n'est pas celle que je recommande pour concaténer deux chaînes. Voir la suite.

Concaténer plusieurs Str à la fois : +
Cette technique est vivement recommandée pour concaténer plusieurs Str. Par rapport à Strjoin(, elle est plus courte et permet d'assembler plus de deux chaînes d'une seule traite.
"Darks" → Str 2
"666" → Str 1
Str 1 + " est le code secret, " + Str 2 + " !" → Str 3
// Str 3 contient "666 est le code secret, Darks !"

Extraire une partie de la chaîne : StrMid( (ou StrLeft( et StrRight( )
La fonction StrMid( – et, dans une moindre mesure, StrLeft( et StrRight( – est extrêmement utile. Je ne cesse de m'en servir. Elle permet d'extraire une partie d'une chaîne à partir d'un indice. Elle peut aussi prendre un troisième paramètre : la longueur de la chaîne à prendre. Si ce paramètre n'est pas préciser, StrMid( extrait tout le reste de la Str à partir de l'indice indiqué.
StrMid( Str 1, 4, 8) //extrait les 8 caractères de la Str 1 à partir du 4ème caractère compris.


Obtenir la longueur précise d'une Str : StrLen(
StrLen( renvoie la longueur de la chaîne de caractère indiquée. Attention toutefois, une Str ne peut pas dépasser 255 caractères !
StrLen( "TROLOLOL") // Renvoie la valeur numérique 8.

Modifier la casse des lettres d'une Str : StrLwr( (Minuscules) et StrUpr( (Majuscules)
StrLwr( et StrUpr( mettent respectivement les lettres d'une Str en minuscule et en majuscule. Ils ne prennent comme paramètre que la Str que vous voulez modifier.
StrLwr("Drak A ECRIT CE TUTO !")
// Renvoie "drak a ecrit ce tuto !"
StrUpr("Je n'aime PAS le chiffre 7."
// Renvoie "JE N'AIME PAS LE CHIFFRE 7."

Rogner une Str par la droite ou la gauche : StrShift(
StrShift( prend deux paramètres : la Str à manipuler et le nombre de caractères à rogner. Ce nombre peut être positif ou négatif. Les caractères qui disparaissent sont remplacés par des espaces.

Rechercher un caractère ou une chaine de caractères dans une Str : StrSrc(
Extrêmement utile, à connaître. StrSrc( renvoie la position (valeur numérique) de la première occurrence indiquée trouvée. Pour faire une analogie, c'est comme si vous faisiez Ctrl + F sur votre navigateur internet. Bien sûr, StrSrc( respecte la casse. Peut prendre un troisième paramètre qui indique l'indice à partir duquel chercher. Attention : SrtSrc( s'arrête à la première occurrence trouvée. Quand rien n'est trouvé, renvoie 0.
"ATTENTION ! ZONE DANGEREUSE !" → Str 1
StrSrc(Str 1, "!") //Renvoie la valeur 11.
StrSrc(Str 1, "!", 12) //Commence la recherche à partir du 12ème caractère. Renvoie la valeur 29.
StrSrc(Str 1, "TENTION !") //Renvoie la position de "T" : 3.
StrSrc(Str 1, "x") //Renvoie 0 : Il n'y a pas de "x".
StrSrc(Str 1, "TENTION !", 9) //Renvoie aussi 0.
StrSrc(Str 1, "TABLE") //Renvoie également 0.
StrSrc(Str 1, "TANTION !") //Idem

Changer une Str en valeur numérique : Exp(
Exp( convertit la chaîne de caractère en une expression mathématique. Si la chaîne contient des lettres, elles sont considérées comme des variables alphanumériques. Si des lettres ne peuvent être converties en variables alphanumériques (minuscules, lettres spéciales, etc.), ou si des caractères ne peuvent être utilisés pour un calcul (espaces, etc.), provoque une erreur syntaxe.
Exp("32") //Renvoie la valeur numérique 32.
Exp("32A") //Renvoie le résultat de 32 * A.
Exp("32 * A") //Erreur syntaxe à cause des espaces.
Exp("BONJOUR") //Renvoie le produit des variables B, O, N, etc.
Exp("Bonjour !") //Erreur syntaxe.
Exp("5i+A*ln (12)-2") //Fonctionne, si "ln " a été entré avec la touche "ln" de la calculatrice.

Faire se déplacer du texte dans une Str : StrRotate(
StrRotate( décale de N les caractères d'une Str. N peut être positif ou négatif, et peut dépasser la longueur de la Str. Elle permet, entre autres, de simuler un défilement de texte.
StrRotate("Achetez les frites de FRITEMAX !  ", 3)
//Renvoie "etez les frites de FRITEMAX !  Ach"
StrRotate("Achetez les frites de FRITEMAX !  ", -5)
//Renvoie "X !  Achetez les frites de FRITEMA"


Partie IV : Application
Il y a de nombreuses manières d'exploiter les fonctions des Str ! En voici quelques unes, assez simples, qui pourront se révéler surement très utiles pour vos programmes, petits ou gros ! N'hésitez pas à poser des questions si besoin !

Enregistrer un nom de joueur.
Que ce soit pour nommer un personnage ou pour enregistrer un nom pour un score de jeu, il est souvent pratique d'être en mesure d'avoir le nom du joueur (ou un pseudonyme choisi par ce dernier). Nous pouvons très simplement récupérer son nom, et même faire en sorte qu'il commence par une majuscule et que le reste soit en minuscule !
"Votre nom"?→Str 1 //Str 1 contient donc le nom.
StrUpr(StrLeft(Str 1, 1)) + StrLwr(StrMid(Str 1, 2))→Str 1
//Dans cette deuxième ligne, on met la première lettre en majuscule et les suivantes en minuscule.

Faire une fonction qui affiche un message en combat.
Plutôt que de réécrire 100 fois un truc affreux comme "Text, 1,1,"Je suis..." : Text 9,1,"Très fort !", etc.", servez-vous des Str ! Dans un moteur de combat, par exemple, vous aurez surement besoin d'afficher des messages à chaque attaque. Mettons que j'enregistre le message à afficher dans Str 2 et que le nom du joueur soit dans Str 1. Cette fonction sera contenue dans un sous-programme.
PROG "COMBAT" :
//Début de tour :
Str 1 + " se prépare à agir !" → Str 2
Prog "TEXT"
[...]
//Au moment de l'attaque, dont le nom est dans Str 3 :
Str 1 + " lance " + Str 3 + " ! " → Str 2
Prog "TEXT"
[...]
//En fin de tour, par exemple :
Str 1 + " a terrassé l'ennemi ! Wheeee!" → Str 2
Prog "TEXT"
//Etc.

_________________________
PROG "TEXT" :
Cls
Text 1,1,Str 2
Do
GetKey
LpWhile Ans ≠ 77
//Affiche le texte et se met en "pause" tant que le joueur n'appuie pas sur [ALPHA]

Faire afficher sur une ligne un texte trop long.
En mode graphique, les lettres prennent, en moyenne, 4 px de large. L'écran de la calculatrice fait 128 px. 128 / 4 = 32. On peut donc considérer qu'à partir de 32 caractères, le texte à afficher dépassera vraisemblablement du cadre. On a le choix entre faire en sorte à ce que le texte ne dépasse jamais 32 caractères, l'afficher sur une deuxième ligne ou bien l'afficher sur une unique ligne en le faisant défiler. Voici comment faire pour cette dernière méthode :
"Je suis la phrase à afficher et j'ai beaucoup trop de lettres. Oh mon dieu ! Achetez les frites de chez FRITEMAX !" → Str 1
Text 1,1,Str 1
Do
If StrLen(Str 1) > 31 // Si la phrase est trop longue...
Then For 1 → A To StrLen(Str 1) Step 2
Text 1,1,StrRotate(Str 1, A) //On la fait défiler dans une boucle
GetKey⇒Break // On sort dès que le joueur presse une touche
Next
IfEnd
GetKey
LpWhile Not Ans //On arrête à l'appui d'une touche.

Hardcoder des données sur des personnages.
Mettons que vous ayez des données par défaut à attribuer à des personnages. Par exemple, une valeur qui correspond à sa force, une autre à sa sagesse et une autre à la robustesse de sa barbe (lol ?), et que vous voulez les attribuer à une liste lorsque le joueur choisit tel ou tel personnage. Si de telles données sont comprises entre 0 et 9, alors vous pouvez tout à fait avoir quelque chose de très propre comme ceci :
//J est l'ID du personnage.
J = 1 ⇒"645Jasper" →Str 4
J = 2 ⇒"428Pavel" →Str 4
J = 3 ⇒"908Brutus" →Str 4
J = 4 ⇒"373Gael" →Str 4
[...]
For 1→A To 3
Exp( StrMid( Str 4, A, 1)) → List 1[A] //On récupère les carac
Next
StrLeft( Str 4, 4)→Str 1//On récupère le nom.

Sélectionner un Sprite pour votre héros en Locate.
Lorsque vous faites un jeu en Locate avec un personnage qui s'y déplace, vous l'affichez surement en faisant :
Locate A, B, "θ"
Sachez que "θ" est aussi une chaîne de caractère. Alors pourquoi ne pas enregistrer ce caractère dans un Str, changeable à volonté ?
ClrText
"==================== Choisissez le heros"
0→D //Le compteur
"αβδσθ" → Str 1 //Les skins disponibles
While 1
StrLeft( StrRotate( Str 1, D), 1) → Str 2
Locate 10,4,Str 2
Do
GetKey
LpWhile Not Ans
Ans = 77 ⇒ Break //Le joueur valide
Ans = 27 ⇒ Isz D
'a //Ce commentaire évite le saut de ligne de Isz D si D = 0.
Ans = 38 ⇒ Dsz D
'a
WhileEnd
Str 2 → Str 1 //Str 1 contient le sprite choisi.


Et voila ! Maintenant, vous n'avez plus d'excuse. UTILISEZ LES STR ! Si ce tuto vous a plu et que vous souhaiteriez voir des techniques plus avancées sur l'utilisation des Str, alors manifestez-vous dans les commentaires !


Liens utiles :
Voir le TDM précédent : Manipulez les Listes !
Tuto pour avoir 40 Str supplémentaires
Cours officiel de Planète Casio sur les Str.
Var2Str, un utilitaire de Totoyo pour convertir une variable en Str.


Discutez de ce tutoriel sur le forum >> Voir le sujet dédié (27 commentaires)

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 126 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd