6. Os ficheiros de texto
Um ficheiro de texto é um ficheiro que contém linhas de texto. Vamos analisar a criação e a utilização desses ficheiros através de exemplos.
6.1. Criação e utilização
Programa |
![]() |
Resultados |
Comentários
- A linha 7 cria um objeto de ficheiro do tipo «Scripting.FileSystemObject» através da função CreateObject("Scripting.FileSystemObject"). Esse objeto permite o acesso a qualquer ficheiro do sistema, e não apenas a ficheiros de texto.
- A linha 9 cria um objeto «TextStream». A criação deste objeto está associada à criação do ficheiro testfile.txt. Este ficheiro não é designado por um nome absoluto do tipo c:\dir1\dir2\....\testfile.txt, mas sim por um nome relativo, testfile.txt. Será, portanto, criado no diretório a partir do qual será executado o comando para abrir o ficheiro.
- O sistema de ficheiros do Windows não reconhece conceitos como «ficheiro de texto» ou «ficheiro não textual». Reconhece apenas ficheiros. Cabe, portanto, ao programa que utiliza esse ficheiro determinar se o vai tratar como um ficheiro de texto ou não.
- A linha 9 cria um objeto a partir do qual o comando set é utilizado para a atribuição. A criação de um objeto de ficheiro de texto passa pela criação de dois objetos:
- a criação de um objeto Scripting.FileSystemObject (linha 7)
- e, em seguida, a criação de um objeto «TextStream» (ficheiro de texto) através do método OpenTextFile do objeto Scripting.FileSystemObject, que aceita vários parâmetros:
- o nome do ficheiro a tratar (obrigatório)
- o modo de utilização do ficheiro. Trata-se de um número inteiro com 3 valores possíveis:
- 1: utilização do ficheiro em modo de leitura
- 2: utilização do ficheiro em modo de escrita. Se o ficheiro ainda não existir e se o terceiro parâmetro estiver presente e tiver o valor «true», o ficheiro é criado; caso contrário, não é criado. Se já existir, é sobrescrito.
- 8: utilização do ficheiro em modo de adição, c.a.d. Escrita no final do ficheiro. Se o ficheiro ainda não existir e se o terceiro parâmetro estiver presente e tiver o valor «true», o ficheiro é criado; caso contrário, não é criado.
- A linha 11 escreve uma linha de texto com o método WriteLine do objeto TextStream criado.
- A linha 13 «fecha» o ficheiro. A partir daí, já não é possível escrever nem ler nele.
- A linha 16 cria um novo objeto «TextStream» para utilizar o mesmo ficheiro que anteriormente, mas desta vez no modo «adição». As linhas que forem escritas serão inseridas a seguir às linhas existentes.
- A linha 18 escreve duas novas linhas, sabendo que a constante vbCRLF é o marcador de fim de linha dos ficheiros de texto.
- A linha 20 fecha novamente o ficheiro
- a linha 23 reabre-o no modo «leitura»: vamos ler o conteúdo do ficheiro.
- A linha 27 lê uma linha de texto com o método ReadLine do objeto TextStream. Quando o ficheiro acaba de ser «aberto», ficamos posicionados na primeira linha de texto do mesmo. Quando esta for lida pelo método ReadLine, ficamos posicionados na segunda linha. Assim, o método Readline não só lê a linha atual, como também «avança» automaticamente para a linha seguinte.
- Para processar todas as linhas de texto, o método ReadLine deve ser aplicado repetidamente num ciclo. Este ciclo (linha 26) termina quando o atributo AtEndOfStream do objeto TextStream assume o valor true. Isso significa, então, que já não há mais linhas para ler no ficheiro.
6.2. Casos de erro
Existem dois casos de erro frequentes:
- abertura para leitura de um ficheiro que não existe
- Abertura para escrita ou adição de um ficheiro que não existe, com o terceiro parâmetro definido como «false» na chamada ao método OpenTextFile.
O programa seguinte mostra como detetar estes erros:
6.3. A aplicação IMPOTS com um ficheiro de texto
Retomamos a aplicação de cálculo do imposto, partindo do princípio de que os dados necessários para o cálculo do imposto se encontram num ficheiro de texto denominado data.txt:
12620 13190 15640 24740 31810 39970 48360 55790 92970 127860 151250 172040 195000 0
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 0,55 0,6 0,65
0 631 1290,5 2072,5 3309,5 4900 6898,5 9316,5 12106 16754,5 23147,5 30710 39312 49062
As três linhas contêm, respetivamente, os dados das tabelas de limites coeffR e coeffN da aplicação. Graças à modularização da nossa aplicação, as alterações ocorrem essencialmente no procedimento getData, responsável pela construção das três tabelas. O novo programa é o seguinte:
Programa |
|
Comentários:
- no ficheiro de texto data.txt, os valores podem estar separados por um ou mais espaços, o que torna impossível utilizar a função split para recuperar os valores da linha. Foi necessário recorrer a uma expressão regular
- a função getData devolve, além das três tabelas de limites (coeffR, coeffN), um resultado que indica se ocorreu ou não um erro. Este resultado é uma variante de tabela com dois elementos. O primeiro elemento é um código de erro (0 se não houver erro), o segundo é a mensagem de erro, caso tenha ocorrido um erro.
- A função getData não verifica a validade dos valores encontrados no ficheiro data.txt. Em condições reais, deveria fazê-lo.
