CAPÍTULO 2
Programação visual com Software Livre
EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo.  Prólogo de Benoit Minisini


2.6 Entrada e saída de arquivos


Neste paragrafo veremos formas mais comuns de trabalhar com arquivos no Gambas. Gambas trata os arquivos como um fluxo de dados (a palavra exata para isso é Stream), o  que tem uma aplicação muito comoda: todos os fluxos de dados são tratados da mesma maneira, pois o código para manipular um arquivo é igual ao código para manipular uma conexão de rede, já que todos são objetos do tipo Stream. A operação tradicional com um arquivo é abrir, criar, escrever e ler dados. Vejamos como se usa:

Arquivo = OPEN Nome_do_Arquivo FOR [ READ  INPUT ] [ WRITE  OUTPUT ] [ CREAT  |  APPEND ]  [ WATCH ]

Abrimos um arquivo com várias finalidades:

* READ ou INPUT: para ler dados,  no primeiro caso não se usa buffer de dados, com IMPUT se houver um buffer intermediário.

* WRITE ou OUTPUT: para escrever dados, com WRITE não há buffer de dados, com OUTPUT se usa.

* CREATE: se o arquivo não existe se cria. Se não usarmos esta palavra, o arquivo deve existir antes de abri-lo ou dará um erro.

* APPEND: os dados são adicionados ao final do texto.                                                        

* WATCH: se especificarmos essa palavra, Gambas lançará os eventos (que veremos mais     adiante) File_Read e File_Write neste caso podemos ler e escrever no arquivo.

Agora, fecharemos um arquivo que foi aberto com a sentença OPEN.

CLOSE [ # ] Arquivo

Escrevemos, convertendo em cadeia de texto, a Expressão no Arquivo aberto anteriormente.

PRINT [  #Arquivo ,  ]  Expressão  ]

Se não especificarmos nenhum arquivo, digitamos a expressão no console, como temos visto em vários exemplos ao longo deste capitulo. A instrução PRINT admite um certo controle de como se colocam as expressões,  dependendo de alguns símbolos de pontuação que podemos colocar no final da sentença:

* Se não há nada depois da Expressão, adiciona-se uma nova linha ao final. Portanto, a saída da seguinte instrução PRINT será em uma nova linha.

* Se há um ponto e virgula atrás da Expressão, a seguinte instrução PRINT será escrita justo atrás  da saída anterior, sem espaço, linhas ou tabulações intermediarias.

* Podemos utilizar uma virgula em lugar de um ponto e virgula, adiciona-se uma             tabulação, como também podemos concatenar expressões em uma mesma linha.

Seguidamente, escreveremos sem converter em cadeia de texto, a Expressão no Arquivo aberto anteriormente. É uma instrução que costuma usar em lugar do PRINT quando os     dados a escrever não são cadeias de textos, como no caso de arquivos binários.

WRITE [  #Arquivo ,  ]    Expressão  [  , Local  ]

Em qualquer caso, também pode ser usada com cadeias de texto e permitir indicar, com o parâmetro Local, os números de caracteres que desejamos tirar em cada operação de escrita. Ao contrario que com o PRINT, não podemos usar os sinais de pontuação para controlar a posição da escrita. 

INPUT  [  #Arquivo ,  ]   Variável1   [  ,  Variável2 ........    ]

Lemos, de um arquivo, um dado e atribuímos seu valor a  Variável1, Variável2, etc. Os dados devem está separados no arquivo por virgula e em linhas diferentes. Se não especificarmos o Arquivo, lemos os dados do console, esperando que o usuário da aplicação o introduza....

READ   [  #Arquivo  ,  ]  Variável  [  , Local  ]

Podemos dizer que é a instrução oposta a WRITE. Lemos do Arquivo dados binários e atribuímos seu valor a Variável. Se essa é uma cadeia de texto, podemos fixar o local da cadeia a ler.

LINE INPPUT [  Arquivo  ,  ]  Variável

Em uma linha de texto inteira do arquivo, que atribuímos a variável. Não devemos usar para ler o fluxo binários.

Eof   ( Arquivo )

Devolve True  (verdadeiro) quando chega ao final do Arquivo e Falso (falso) em caso contrário.

Lof (  Fluxo  )

Se é Fluxo de dados em um arquivo, devolve seu tamanho. Se em lugar de um arquivo é um Socket de uma conexão de rede ou um objeto Process, devolve o número de bytes que podemos ler de uma só vez. Uma vez vista  as sentenças mais comuns para manipular o fluxo de dados, Vamos a alguns exemplos de uso:


' Ler dados de uma porta série:
' Requer selecionar o componente gb.net no projeto
DIM Arquivo AS File

Arquivo = OPEN "/dev/ttySO"  FOR READ WRITE WATCH

.........................

'O evento File_Read é produzido quando há dados pra ler:
PUBLIC SUB File_Read()

DIM iByte AS Byte

READ #Arquivo  iByte

PRINT  " Tenho um byte:  " ; iByte

'Ler o conteudo do arquivo     /etc/passwd  e o mostra no console:
DIM Arquivo AS File

DIM Linha AS String

Arquivo = OPEN   "/etc/passwd"  FOR INPUT

WHILE NOT Eof (Arquivo)

LINE INPUT #Arquivo,  Linha

PRINT Linha

WEND
 
CLOSE Arquivo


HOME

Cópia literal

Extraído do livro “GAMBAS, programação visual com software Livre”, da editora EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo. Prólogo de Benoît Minisini

LICENSA DESTE DOCUMENTO


É permitido a cópia e distribuição da totalidade ou parte desta obra sem fins lucrativos. Toda cópia total ou parcial devera expressar o nome do autor e da editora e incluir esta mesma licença, adicionando se é uma cópia literal “Cópia literal”. Se é autorizada a modificação e tradução da obra  sem fins lucrativos sempre se deve constar na obra resultante  a modificação o nome da obra original o autor da obra original e o nome da editora e a obra resultante também deverá ser livremente reproduzida, distribuída, ao publico e transformada em termos similares ao exposto nesta licença.

Tradução

Cientista
 (Antonio Sousa)