Próximo: , Anterior: , Acima: stringproc   [Conteúdo][Índice]

69.2, Definições para entrada e saída

Exemplo:

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

Fecha fluxo e retorna true se fluxo tiver sido aberto anteriormente.

Função: flength (fluxo)

Retorna o número de elementos em fluxo.

Função: fposition (fluxo)
Função: fposition (fluxo, pos)

Retorna a posição corrente em fluxo, se pos não está sendo usada. Se pos estiver sendo usada, fposition escolhe a posição em fluxo. pos tem que ser um número positivo, o primeiro elemento em fluxo está na posição 1.

Função: freshline ()
Função: freshline (fluxo)

escreve uma nova linha (em fluxo), se a posição actual não for um início de linha. Veja também newline.

Função: newline ()
Função: newline (fluxo)

Escreve uma nova linha (para fluxo). Veja sprint para um exemplo de uso de newline(). Note que existem alguns casos, onde newline()não trabalha como esperado.

Função: opena (ficheiro)

Retorna um fluxo de saída para ficheiro. Se um ficheiro já existente tiver sido aberto, opena anexa os elementos ao final do ficheiro.

Função: openr (ficheiro)

Retorna um fluxo para ficheiro. Se ficheiro não existir, ele será criado.

Função: openw (ficheiro)

Retorna um fluxo de saída para ficheiro. Se ficheiro não existir, será criado. Se um ficheiro já existente for aberto, openw modifica destrutivametne o ficheiro.

Função: printf (dest, seq_caracte)
Função: printf (dest, seq_caracte, expr_1, ..., expr_n)

Torna a função FORMAT do Lisp Comum disponível no Maxima. (Retirado de gcl.info: "format produces formatted output by outputting the caracteres of control-string string and observing that a tilde introduces a directive. The caractere after the tilde, possibly preceded by prefix parameters and modifiers, specifies what kind of formatting is desired. Most directives use one or more elements of args to create their output.")

A seguinte descrição e oa exemplos podem fornecer uma idéia de uso de printf. Veja um referência de Lisp para maiores informações.

   ~%       nova linha
   ~&       novíssima line
   ~t       tabulação
   ~$       monetário
   ~d       inteiro decimal
   ~b       inteiro binário
   ~o       inteiro octal
   ~x       inteiro hexadecimal
   ~br      inteiro de base b
   ~r       soletra um inteiro
   ~p       plural
   ~f       ponto flutuante
   ~e       notação científica
   ~g       ~f ou ~e, dependendo  da magnitude
   ~a       como mostrado pela função print do Maxima
   ~s       sequências de caracteres entre "aspas duplas"
   ~~       ~
   ~<       justificação de texto, ~> terminador de justificação de texto
   ~(       conversão de caixa alta/baixa, ~) terminador de conversão de caixa
   ~[       selecção, ~] terminador de selecção 
   ~{       iteração, ~} terminador de iteração

Por favor note que não existe especificador de formato para grandes números em ponto flutuante. Todavia grandes números em ponto flutuante podem simplesmente serem mostrados por meio da directiva ~a. ~s mostra as sequências de caracteres entre "aspas duplas"; pode evitar isso usando ~a. Note que a directiva de selecção ~[ é indexada em zero. Também note que existem algumas directivas, que não trabalham no Maxima. Por exemplo, ~:[ falha.

(%i1) load("stringproc")$
(%i2) printf( false, "~a ~a ~4f ~a ~@r", 
              "String",sym,bound,sqrt(12),144), bound = 1.234;
(%o2)                 String sym 1.23 2*sqrt(3) CXLIV
(%i3) printf( false,"~{~a ~}",["one",2,"THREE"] );
(%o3)                          one 2 THREE 
(%i4) 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 
(%i5) control: "~:(~r~) bird~p ~[is~;are~] singing."$
(%i6) printf( false,control, n,n,if n=1 then 0 else 1 ), n=2;
(%o6)                    Two birds are singing.

Se dest for um fluxo ou true, então printf retorna false. De outra forma, printf retorna uma sequência de caracteres contendo a saída.

Função: readline (fluxo)

Retorna uma sequência de caracteres contendo os caracteres a partir da posição corrente em fluxo até o fim de linha ou false se o fim de linha do ficheiro for encontrado.

Função: sprint (expr_1, ..., expr_n)

Avalia e mostra seus argumentos um após o outro ‘sobre uma linha’ iniciando na posição mais à esquerda. Os números são mostrados com o ’-’ à direita do número, e isso desconsidera o comprimento da linha. newline(), que pode ser chamada a partir de stringproc.lisp pode ser útil, se desejar colocar uma parada de linha intermédia.

(%i1) for n:0 thru 22 do sprint( fib(n) )$
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 
(%i2) load("stringproc")$
(%i3) 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 

Próximo: , Anterior: , Acima: stringproc   [Conteúdo][Índice]