Funciones y variables para entrada y salida (Manual de Maxima 5.44.0)

Siguiente: Funciones y variables para caracteres, Anterior: Introducción al procesamiento de cadenas, Subir: stringproc [Índice general][Índice]

### 76.2 Funciones y variables para entrada y salida

Ejemplo:

    (%i1) s: openw("E:/file.txt");
    (%o1)                     #<output stream E:/file.txt>
    (%i2) control:
    "~2tAn atom: ~20t~a~%~2tand a list: ~20t~{~r ~}~%~2t\
               and an integer: ~20t~d~%"$
    (%i3) printf( s,control, 'true,[1,2,3],42 )$
    (%o3)                                false
    (%i4) close(s);
    (%o4)                                true
    (%i5) s: openr("E:/file.txt");
    (%o5)                     #<input stream E:/file.txt>
    (%i6) while stringp( tmp:readline(s) ) do print(tmp)$
      An atom:          true
      and a list:       one two three
      and an integer:   42
    (%i7) close(s)$

Función: close (stream)

  Cierra el flujo de datos stream y devuelve `true` si stream había sido abierto.

Función: flength (stream)

  Devuelve el número de elementos en stream, el cual debe ser un flujo de datos desde o hacia un fichero.

Función: fposition (stream)
Función: fposition (stream, pos)

  Devuelve la posición actual en el flujo de datos stream si no se utiliza pos. Si se utiliza pos, `fposition` fija la posición en stream. stream debe ser un flujo de datos desde o hacia un fichero y pos debe ser un entero positivo que hace corresponder al primer elemento de stream la posición 1.

Función: freshline ()
Función: freshline (stream)

  Escribe una nueva línea (en el flujo de datos stream) si la posición actual no corresponde al inicio de la línea.

  Véase también `newline`.

Función: get_output_stream_string (stream)

  Devuelve una cadena con todos los caracteres presentes en stream, que debe ser un flujo de datos de salida abiero. Los caracteres devueltos son eliminados de stream.

  Para un ejemplo, véase `make_string_output_stream` .

Función: make_string_input_stream (string)
Función: make_string_input_stream (string, start)
Función: make_string_input_stream (string, start, end)

  Devuelve un flujo de entrada que contiene partes de string junto con el carácter de final de fichero. Sin argumentos opcionales, el flujo contiene la cadena entera y se posiciona frente al primer carácter. Los argumentos start y end definen la subcadena contenida en el flujo. El primer carácter está disponible en la posición 1.

  Ejemplo:

      (%i1) istream : make_string_input_stream("text", 1, 4);
      (%o1)              #<string-input stream from "text">
      (%i2) (while (c : readchar(istream)) # false do sprint(c), newline())$
      t e x
      (%i3) close(istream)$

Función: make_string_output_stream ()

  Devuelve un flujo de salida que acepta caracteres. Los caracteres de este flujo podrán obtenerse con `get_output_stream_string`.

  Ejemplo:

      (%i1) ostream : make_string_output_stream();
      (%o1)               #<string-output stream 09622ea0>
      (%i2) printf(ostream, "foo")$

      (%i3) printf(ostream, "bar")$

      (%i4) string : get_output_stream_string(ostream);
      (%o4)                            foobar
      (%i5) printf(ostream, "baz")$

      (%i6) string : get_output_stream_string(ostream);
      (%o6)                              baz
      (%i7) close(ostream)$

Función: newline ()
Función: newline (stream)

  Escribe una nueva línea (en el flujo de datos stream).

  Véase `sprint` para un ejemplo de uso de `newline()`.

  Nótese que hay algunos casos en los que `newline` no trabaja según lo esperado.

Función: opena (file)

  Devuelve un flujo de datos al fichero file. Si se abre un fichero ya existente, `opena` añade elementos al final del fichero.

Función: openr (file)

  Devuelve un flujo de datos de entrada al fichero file. Si file no existe, será creado.

Función: openw (file)

  Devuelve un flujo de datos de salida al fichero file. Si file no existe, será creado. Si se abre un fichero ya existente, `openw` lo modifica borrando el contenido anterior.

Función: printf (dest, string)
Función: printf (dest, string, expr_1, ..., expr_n)

  Genera una cadena de caracteres a partir de la cadena de control string, teniendo en cuenta que las tildes introducen directivas. El carácter que va después de la tilde, posiblemente precedido por parámetros y modificadores, especifica el tipo de formato que se desea. La mayor parte de las directivas usan uno o más elementos de los argumentos expr_1, ..., expr_n para crear la salida.

  Si dest es un flujo o vale `true`, entonces `printf` devuelve `false`. En otro caso, `printf` devuelve una cadena conteniendo la salida.

  `printf` da acceso a la función `format` de Common Lisp. El siguiente ejemplo muestra la relación entre estas dos funciones.

      (%i1) printf(true, "R~dD~d~%", 2, 2);
      R2D2
      (%o1)                                false
      (%i2) :lisp (format t "R~dD~d~%" 2 2)
      R2D2
      NIL

  La siguiente descripción es un simple resumen de las posibilidades de `printf`. La función `format` de Common Lisp se encuentra descrita en detalle en muchas referencias, como el manual libre "Common Lisp the Language" de Guy L. Steele; en particular, el capítulo 22.3.3.

         ~%       nueva línea
         ~&       línea de refresco
         ~t       tabulación
         ~$       moneda
         ~d       entero en base decimal
         ~b       entero en base binaria
         ~o       entero en base octal
         ~x       entero en base hexadecimal
         ~br      entero en base b
         ~r       deletrea un entero
         ~p       plural
         ~f       decimal en coma flotante
         ~e       notación científica
         ~g       ~f o ~e, dependiendo de la magnitud
         ~h       número decimal grande (bigfloat)
         ~a       utiliza la función string de Maxima
         ~s       como ~a, pero las cadenas se devuelven entre "comillas dobles"
         ~~       ~
         ~<       justificación, ~> termina
         ~(       conversor mayúscula/minúscula, ~) termina
         ~[       selección, ~] termina
         ~{       iteración, ~} termina

  La directiva `~h` para números decimales grandes no pertenece al estándar de Lisp, por lo que se ilustra más abajo.

  La directiva `~*` no está soportada.

  Ejemplos:

  Si dest es un flujo o vale `true`, entonces `printf` devuelve `false`. En otro caso, `printf` devuelve una cadena conteniendo la salida.

      (%i1) printf( false, "~a ~a ~4f ~a ~@r",
                    "String",sym,bound,sqrt(12),144), bound = 1.234;
      (%o1)                 String sym 1.23 2*sqrt(3) CXLIV
      (%i2) printf( false,"~{~a ~}",["one",2,"THREE"] );
      (%o2)                          one 2 THREE
      (%i3) printf(true,"~{~{~9,1f ~}~%~}",mat ),
                mat = args(matrix([1.1,2,3.33],[4,5,6],[7,8.88,9]))$
            1.1       2.0       3.3
            4.0       5.0       6.0
            7.0       8.9       9.0
      (%i4) control: "~:(~r~) bird~p ~[is~;are~] singing."$
      (%i5) printf( false,control, n,n,if n=1 then 1 else 2 ), n=2;
      (%o5)                    Two birds are singing.

  La directiva `~h` se ha introducido para formatear decimales grandes.

      ~w,d,e,x,o,p@H
       w : width
       d : decimal digits behind floating point
       e : minimal exponent digits
       x : preferred exponent
       o : overflow character
       p : padding character
       @ : display sign for positive numbers

      (%i1) fpprec : 1000$
      (%i2) printf(true, "|~h|~%", 2.b0^-64)$
      |0.0000000000000000000542101086242752217003726400434970855712890625|
      (%i3) fpprec : 26$
      (%i4) printf(true, "|~h|~%", sqrt(2))$
      |1.4142135623730950488016887|
      (%i5) fpprec : 24$
      (%i6) printf(true, "|~h|~%", sqrt(2))$
      |1.41421356237309504880169|
      (%i7) printf(true, "|~28h|~%", sqrt(2))$
      |   1.41421356237309504880169|
      (%i8) printf(true, "|~28,,,,,'*h|~%", sqrt(2))$
      |***1.41421356237309504880169|
      (%i9) printf(true, "|~,18h|~%", sqrt(2))$
      |1.414213562373095049|
      (%i10) printf(true, "|~,,,-3h|~%", sqrt(2))$
      |1414.21356237309504880169b-3|
      (%i11) printf(true, "|~,,2,-3h|~%", sqrt(2))$
      |1414.21356237309504880169b-03|
      (%i12) printf(true, "|~20h|~%", sqrt(2))$
      |1.41421356237309504880169|
      (%i13) printf(true, "|~20,,,,'+h|~%", sqrt(2))$
      |++++++++++++++++++++|

Función: readchar (stream)

  Elimina y devuelve el primer carácter de stream. Si se ha alcanzado el final del fichero, `readchar` devuelve `false`.

  Para un ejemplo, véase `make_string_input_stream`.

Función: readline (stream)

  Devuelve una cadena con los caracteres desde la posición actual en el flujo de datos stream hasta el final de la línea, o `false` si se ha alcanzado el final del fichero.

Función: sprint (expr_1, ..., expr_n)

  Evalúa y muestra sus argumentos uno tras otro en un renglón comenzando por su extremo izquierdo.

  La función `newline()`, que se carga automáticamente desde `stringproc.lisp`, puede ser de utilidad si se quiere intercalar un salto de línea.

      (%i1) for n:0 thru 19 do sprint( fib(n) )$
      0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
      (%i2) for n:0 thru 22 do (
               sprint(fib(n)), if mod(n,10)=9 then newline() )$
      0 1 1 2 3 5 8 13 21 34
      55 89 144 233 377 610 987 1597 2584 4181
      6765 10946 17711

Siguiente: Funciones y variables para caracteres, Anterior: Introducción al procesamiento de cadenas, Subir: stringproc [Índice general][Índice]