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

73.2, Funções e Variáveis para entrada e saída

Exemplo:

(%i1) s: openw("E:/file.txt");
(%o1)                     #<output stream E:/file.txt>
(%i2) control: 
 "~2tAn atom: ~20t~a~%~2tand a list: ~20t~{~r ~}~%~2tand 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)$
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 atual 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 (arquivo)

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

Função: openr (arquivo)

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

Função: openw (arquivo)

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

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       seqüê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
   ~[       seleção, ~] terminador de seleçã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 diretiva ~a. ~s mostra a seqüências de caracteres entre "aspas duplas", você pode evitar isso usando ~a. Note que a diretiva de seleção ~[ é indexada em zero. Também note que existem algumas diretivas, que não trabalham no Maxima. Por exemplo, ~:[ falha.

(%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 0 else 1 ), n=2;
(%o5)                    Two birds are singing.

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

Função: readline (fluxo)

Retorna uma seqüê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 arquivo 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 irá ser chamada automaticamente a partir de stringproc.lisp pode ser útil, se você desejar colocar uma parada de linha intermediária.

(%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) 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]