Manual de Basic Spectrum 48k.

Capítulo 8

Cadenas

Resumen

  • Fragmentación utilizando TO. Observe que esta notación no es de BASIC estándar.

Dada una cadena, una subcadena de la misma está constituida por algunos caracteres consecutivos de ella tomados en secuencia. Por consiguiente, "strin" es una subcadena de "bigger string" (una cadena más grande), pero no son subcadenas "b sting" y "big reg".

Hay una notación denominada "slicing" (fragmentación) para describir las subcadenas y puede aplicarse a cualquier expresión de cadena. La forma general es:

expresión de cadena (comienzo TO final)

de modo que, por ejemplo:

"abcdef"(2 TO 5)="abcde"

Si omite el comienzo, entonces se supone que es 1; si omite el final, entonces se supone la longitud de la cadena. Por consiguiente:

"abcdef"(TO 5)="abcde"
"abcdef"(2 TO)="abcdef"(2 TO 6)="bcdef"
"abcdef"(TO)="abcdef"(1 TO 6)="abcdef"

(también puede escribir la última como "abcdef"(), ya que lo admite.

Una forma algo diferente es cuando se omite TO y sólo hay un número:

"abcdef"(3)="abcde"(3 TO 3)="c"

Aunque el comienzo y el final suelen referirse a partes existentes de la cadena, esta regla queda derogada por otra: si el valor es mayor que el contenido de la cadena, el resultado es una cadena vacia. Así:

"abcdef"(5 TO 7)

da el error 3 subscript wrong porque la cadena sólo contiene 6 caracteres y 7 es superior, pero:

"abcdef"(8 TO 7)=""

y

"abcdef"(1 TO 0)=""

El comienzo y el final no deben ser negativos u obtendrá un erros B integer out of range (entero B fuera de margen). El siguiente ejemplo es una simple ilustración de estas reglas.

10 LET a$="abcdef"
20 FOR n=1 TO 6
30 PRINT a$(n TO 6)
40 NEXT n
50 STOP

Teclee NEW cuando se haya ejecutado este programa e introduzca el programa siguiente:

10 LET a$="No lo creo"
20 FOR n=1 TO 10
30 PRINT a$(n TO 10),a$((10-n)TO 10)
40 NEXT n
50 STOP

Para variables de cadena, podemos no solamente extraer subcadenas, sino también asignarlas.

Por ejemplo, teclee:

LET a$="Yo soy el ZX Spectrum"

y luego:

LET a$=(1 TO 3)="******"

y

PRINT a$

Observe cómo puesto que la subcadena a$(5 TO 8) sólo tiene 4 carácteres de longitud, se han utilizado únicamente las cuatro primeras estrellas. Esta es una característica de la asignación a subcadenas: la subcadena ha de tener exactamente la misma longitud después que antes de su asignación. Para cerciorarse de que sucede así, la cadena implicada en la asignación se corta a la derecha si es demasiado larga o se rellena con espacios si es demasiado corta. Este método se llama asignación procusteana en rememoración del célebre posadero Procustes que acostumbraba a cerciorarse de que sus huéspedes encajaban en la cama estirándoles en un potro de tormento o cortándoles los pies.

Sí, ahora, prueba:

LET a$=()="Como estás?"

y

PRINT a$;"."

observará que vuelve a suceder los mismo (esta vez con espacios introducidos) porque a$() cuenta como una subcadena.

LET a$="Como estas?"

lo hará adecuadamente.

Las expresiones de cadenas complicadas necesitarán encerrarse entre paréntesis antes de que puedan fragmentarse. Por ejemplo:

"abcd"+"def"(1 TO 2)="abcde"
("abc"+"def")(1 TO 2)="ab"

Ejercicio

  1. Intente escribir un programa para que se imprima el día de la semana utilizando el método de la fragmentación. Recomendación: Se sugiere que la cadena sea DomLunMarMiercJuevVieSab.

Manual de Basic Spectrum 48k.