Siguiente: Funciones y variables para entrada y salida, Anterior: stringproc, Subir: stringproc [Índice general][Índice]
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]