Longueur d’une chaîne de caractères en BASIC

Bonjour,

je n’arrive pas à trouver comment obtenir la longueur d’une chaîne en BASIC.
Je suis en train d’essayer quelques bidouilles en BASIC :slight_smile:

Existe-t-il un moyen plus « rapide » que MID$ pour lire un seul caractère d’une chaîne ? J’aimerais faire une boucle sur une chaîne pour l’afficher caractère par caractère.

Pas de POKE, CALL ou PEEK :slight_smile:

La longueur d’une chaîne de caractères, c’est bien LEN(x$), n’est-ce pas ?

Merci,

j’ai bêtement manqué la commande dans le manuel !

Pour MID$, non il n’y a rien d’autre…

Et oui, pour aller plus vite : récupération de l’adresse de stockage la chaine via @var (et connaissance de la façon dont c’est encodé) puis PEEK dans la mémoire… Mais tu ne souhaites pas passer par là. Même s’il s’agit juste de lecture via PEEK (pas de CALL/POKE), ça rend le code CPC only.

Bonjour,

je peux vous dire que ça m’a déjà énormément aidé !
Le résultat actuel est déjà presque parfait ! (pas encore testé sur le matériel d’origine)

Je peux vous montrer une image ici — et tout est en mouvement :slight_smile:

Mais la présentation officielle n’aura lieu qu’à la Classic Computing 2026 à Celle (10-11 octobre)

1 « J'aime »

Ça a l’air cool. Au passage : je pense que tu devrais ajouter la Classic Computing 2026 à Celle dans les événements. Ça pourrait aider à booster la visibilité et la participation :slight_smile:

Merci pour le tuyau — En mouvement, c’est encore plus génial !

J’ai lu un autre de tes messages… Comme il ne s’agit pas d’assembleur mais de code BASIC, voici l’accès direct à un caractère en BASIC.

10 A$="Texte"
20 AD=@A$:REM AD = Adresse mémoire de A$
30 L=PEEK(AD): REM L = Taille de A$ (identique à LEN)
40 AD1 = PEEK (AD+1) : REM AD1 = LSB de "Texte"
50 AD2 = PEEK (AD+2) : REM AD2 = MSB de "Texte"
60 TAD = AD2 * 256 + AD1 : REM TAD = Adresse mémoire de "Texte"
70 FOR I=0 TO L-1:PRINT CHR$(PEEK(TAD+I)):NEXT I : REM Affiche tous les caractères un par un
3 « J'aime »

En mouvement, c’est encore bien plus joli ! :slight_smile:

Ohhh, il faut que je teste ça dans une « version spéciale » parce que dans cette version, je ne veux pas utiliser peek et poke… :slight_smile:

Et, pour l’instant, ça a l’air assez rapide avec mid$

Comme toujours, si vous avez calculé l’adresse vous-même, accéder à une lettre est aussi simple que d’obtenir une valeur après une addition.
Avec MID$, le BASIC fait la même chose en boucle à chaque fois, ce qui ajoute une surcharge qui peut être contournée grâce à ce type d’accès rapide.

À l’époque, quand la seule routine de défilement que je connaissais était MID$, j’avais remarqué qu’elle était lente lorsqu’elle parcourait une (longue) chaîne/un message et qu’elle s’accélérait vers la fin. Je me demande si c’était dû à une extraction de sous-chaîne inefficace ou simplement parce qu’il y avait moins de caractères à afficher lorsqu’il ne restait plus que 10, 9, 8… caractères de la longue chaîne. Aujourd’hui, je suppose que c’était plutôt cette seconde option :slight_smile:

Oui, c’est bien pour ça que le Peek est EXTRÊMEMENT séduisant !

Mais j’ai simplement envie de m’éloigner du « bas niveau » pour aller vers « ce que seul le Basic fournit ».