por alguna razón no consigo averiguar cómo ver la longitud de una cadena en BASIC.
Estoy intentando hacer algunas pruebas y experimentos en BASIC
¿Existe una forma más “rápida” que MID$ para leer un solo carácter de una cadena? Me gustaría hacer un bucle sobre una cadena para ir mostrándola carácter a carácter.
Y sí, para ir más rápido: obtener la dirección de almacenamiento de la cadena mediante @var (y conocer cómo está codificada) y luego hacer PEEK en la memoria… Pero no quieres ir por ahí. Aunque solo sea lectura mediante PEEK (nada de CALL/POKE), eso hace que el código sea exclusivo de CPC.
Tiene buena pinta. Por cierto: creo que deberías añadir la Classic Computing 2026 en Celle a los eventos. Podría ayudar a darle más visibilidad y aumentar la asistencia
He leído otro de tus posts… Como esto no es lenguaje ensamblador sino codificación en BASIC, aquí tienes el acceso directo a un carácter en BASIC.
10 A$="Texte"
20 AD=@A$:REM AD = Dirección de memoria de A$
30 L=PEEK(AD): REM L = Tamaño de A$ (igual que 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 = Dirección de memoria de "Texte"
70 FOR I=0 TO L-1:PRINT CHR$(PEEK(TAD+I)):NEXT I : REM Imprime todos los caracteres uno a uno
Como siempre, si has calculado la dirección tú mismo, acceder a una letra es tan fácil como obtener un valor después de una suma.
Con MID$, BASIC está haciendo lo mismo una y otra vez cada vez, lo que añade una sobrecarga que se puede evitar con este tipo de acceso rápido.
En aquellos tiempos, cuando la única rutina de desplazamiento que conocía era MID$, me di cuenta de que iba lenta al recorrer una cadena/mensaje (largo) y que se aceleraba hacia el final. Me pregunto si se debía a alguna extracción ineficiente de subcadenas o simplemente a que tenía menos caracteres que imprimir cuando solo quedaban 10, 9, 8… caracteres de la cadena larga. Ahora supongo que era esto último