Introducción al procesamiento de cadenas (Manual de Maxima 5.44.0)

Siguiente: Funciones y variables para entrada y salida, Anterior: stringproc, Subir: stringproc [Índice general][Índice]

### 76.1 Introducción al procesamiento de cadenas

El paquete `stringproc` amplía las capacidades de Maxima para manipular cadenas de caracteres, al tiempo que añade algunas funciones útiles para la lectura y escritura de ficheros.

Para dudas y fallos, por favor contáctese con `volkervannek at gmail dot com`.

En Maxima, una cadena de caracteres se construye fácilmente escribiéndola entre comillas dobles, como en `"texto"`. La función `stringp` comprueba si el argumento es una cadena.

    (%i1) m: "text";
    (%o1)                         text
    (%i2) stringp(m);
    (%o2)                         true

Los caracteres se representan como cadenas de longitud unidad. No se tratan como caracteres Lisp. Se pueden chequear con la función `charp` (o con `lcharp` para los caracteres Lisp). La conversión de caracteres Lisp a caracteres Maxima se realiza con la función `cunlisp`.

    (%i1) c: "e";
    (%o1)                           e
    (%i2) [charp(c),lcharp(c)];
    (%o2)                     [true, false]
    (%i3) supcase(c);
    (%o3)                           E
    (%i4) charp(%);
    (%o4)                         true

Todos los caracteres devueltos por las funciones de `stringproc` son caracteres de Maxima. Puesto que los caracteres introducidos son cadenas de longitud igual a la unidad, se pueden utilizar las funciones de cadenas también para los caracteres, como se ha hecho con `supcase` en el anterior ejemplo.

Es importante tener en cuenta que el primer carácter en una cadena de Maxima ocupa la posición 1. Esto se ha diseñado así para mantener la compatibilidad con las listas de Maxima. Véanse las definiciones de `charat` y `charlist` para ver ejemplos.

Las funciones de cadena se utilizan frecuentemente cuando se trabaja con ficheros. El siguiente ejemplo muestra algunas de estas funciones en acción.

Ejemplo:

La función `openw` envía un flujo de salida hacia un fichero, entonces `printf` permitirá formatera la escritura en este fichero. Véase `printf` para más detalles.

    (%i1) s: openw("E:/file.txt");
    (%o1)                    #<output stream E:/file.txt>
    (%i2) for n:0 thru 10 do printf( s, "~d ", fib(n) );
    (%o2)                                done
    (%i3) printf( s, "~%~d ~f ~a ~a ~f ~e ~a~%",
                  42,1.234,sqrt(2),%pi,1.0e-2,1.0e-2,1.0b-2 );
    (%o3)                                false
    (%i4) close(s);
    (%o4)                                true

Una vez cerrado el flujo, se podrá abrir nuevamente. La función `readline` devuelve el renglón entero como una única cadena. El paquete `stringproc` dispone de muchas funciones para manipular cadenas. La separación de palabras se puede hacer con `split` o `tokens`.

    (%i5) s: openr("E:/file.txt");
    (%o5)                     #<input stream E:/file.txt>
    (%i6) readline(s);
    (%o6)                     0 1 1 2 3 5 8 13 21 34 55
    (%i7) line: readline(s);
    (%o7)               42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
    (%i8) list: tokens(line);
    (%o8)           [42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2]
    (%i9) map( parsetoken, list );
    (%o9)           [42, 1.234, false, false, 0.01, 0.01, false]

La función `parsetoken` sólo analiza sintácticamente números enteros y decimales. El análisis de símbolos y números decimales grandes (big floats) necesita `parse_string`, que se cargar automáticamente desde `eval_string.lisp`.

    (%i5) s: openr("E:/file.txt");
    (%o5)                     #<input stream E:/file.txt>
    (%i6) readline(s);
    (%o6)                     0 1 1 2 3 5 8 13 21 34 55
    (%i7) line: readline(s);
    (%o7)               42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
    (%i8) list: tokens(line);
    (%o8)           [42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2]
    (%i9) map( parse_string, list );
    (%o9)            [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2]
    (%i10) float(%);
    (%o10) [42.0, 1.234, 1.414213562373095, 3.141592653589793, 0.01,
                                                         0.01, 0.01]
    (%i11) readline(s);
    (%o11)                               false
    (%i12) close(s)$

La función `readline` devuelve `false` cuando se alcanza el final del fichero.

Siguiente: Funciones y variables para entrada y salida, Anterior: stringproc, Subir: stringproc [Índice general][Índice]