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
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.
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.
Ç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
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
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