Longitud de un string en BASIC

Hola,

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 :slight_smile:

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

Sin POKEs, CALLs ni PEEKs :slight_smile:

La longitud de una cadena es LEN(x$), ¿verdad?

¡Gracias!

¡De alguna manera pasé por alto el comando en el manual!

Para MID$, no, no hay nada más…

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.

Hola:

¡Puedo decir que ya me ha ayudado muchísimo!
El resultado hasta ahora parece casi perfecto (aún no lo he probado en el original).

Aquí puedo mostrar una imagen, ¡y todo está en movimiento! :slight_smile:

Pero no se presentará hasta la Classic Computing 2026 en Celle (10 y 11 de octubre).

1 me gusta

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 :slight_smile:

¡Gracias por el consejo! ¡En movimiento se ve todavía más genial!

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
3 Me gusta

¡En movimiento se vede aún mejor! :slight_smile:

Ohhh, tengo que probarlo en una «versión especial» porque en esta versión no quiero usar peek y poke … :slight_smile:

Y, por el momento, parece lo suficientemente rápido con mid$

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 :slight_smile:

¡Sí, por eso lo de Peek resulta EXTREMADAMENTE atractivo!

Pero es que quiero alejarme de lo «cercano a la máquina» y subir hacia «lo que solo proporciona lo básico»