Les chaînes de caractères
Parmi les améliorations du Sinclair BASIC, on retrouve le mot clef TO. Notez que cette notation n'est pas la norme BASIC.
Étant donné une chaîne de caractères, une sous-chaîne de caractères de celle-ci se compose de certains caractères consécutifs de celle-ci, pris dans l'ordre. Ainsi, une chaîne de caractères est une sous-chaîne de caractères d'une grande chaîne de caractères, mais "g chaine" et "grande chaine" ne le sont pas.
Il existe une notation appelée découpage pour décrire les sous-chaînes de caractères, et cela peut être appliqué à des expressions de chaîne de caractères arbitraires. La forme générale est :
string expression (start TO finish) |
de sorte que, par exemple :
- "abcdef"(2 TO 5)="bcde"
Si vous omettez le début, alors 1 est supposé ; si vous omettez la finition, la longueur de la chaîne de caractères est supposée. Ainsi :
- "abcdef"( TO 5)="abcdef"(1 TO 5)="abcde"
- "abcdef"(2 TO )="abcdef"(2 TO 6)="bcdef"
- "abcdef"( TO )="abcdef"(1 TO 6)="abcde"
(Vous pouvez également écrire ce dernier comme "abcdef"(), pour ce que ça vaut.) Une forme légèrement différente manque le TO et n'a qu'un seul numéro.
- "abcdef"(3)="abcdef"(3 TO 3)="c"
Bien que normalement début et fin doivent faire référence à des parties existantes de la chaîne de caractères, cette règle est remplacée par une autre : si le début est supérieur à la fin, le résultat est la chaîne de caractères est vide. Donc :
- "abcdef"(5 TO 7)
donne l'erreur 3 indice erroné car la chaîne de caractères ne contient que 6 caractères et 7 est trop, mais :
- "abcdef"(8 TO 7)=""
et
- "abcdef"(1 TO 0)=""
Le début et la fin ne doivent pas être négatifs, sinon vous obtenez l'erreur B integer out of range. Ce programme suivant est simple et illustre certaines de ces règles :
Tapez NEW lorsque ce programme a été exécuté et entrez dans le programme suivant :
Pour les variables de chaîne de caractères, nous pouvons non seulement extraire des sous-chaînes de caractères, mais aussi leur attribuer. Par exemple, tapez :
- LET a$="Je suis le ZX Spectrum"
et puis :
- LET a$(5 TO 8)="******"
et :
- PRINT a$
Remarquez comment puisque la sous-chaîne de caractères a$(5 TO 8) ne comporte que 4 caractères, seules les quatre premières étoiles ont été utilisées. C'est une caractéristique de l'affectation aux sous-chaînes de caractères : la sous-chaîne de caractères doit avoir exactement la même longueur après qu'elle était avant. Pour s'en assurer, la chaîne de caractères lui étant assignée est coupée à droite si elle est trop longue, ou remplie d'espaces si elle est trop courte - c'est ce qu'on appelle l'assignation Procrustéenne d'après l'aubergiste Procuste ayant utilisé pour s'assurer que ses invités ont installé le lit en les étirant sur une grille ou en leur coupant les pieds. Si vous essayez maintenant :
- LET a$()="Bonjour ici"
et :
- PRINT a$;"."
vous verrez que la même chose s'est reproduite (cette fois avec des espaces) car a$() compte comme une sous-chaîne de caractères :
- LET a$="Bonjour ici"
le fera correctement. Les expressions de chaîne de caractères compliquées devront être entourées de crochets avant de pouvoir être découpées. Par exemple :
- "abc"+"def"(1 TO 2)="abcde"
- ("abc"+"def")(1 TO 2)="ab"