6. Arquivos de texto
Um arquivo de texto é um arquivo que contém linhas de texto. Vamos examinar a criação e o uso desses arquivos por meio de exemplos.
6.1. Criação e utilização
Programa |
![]() |
Resultados |
Comentários
- A linha 7 cria um objeto de arquivo do tipo “Scripting.FileSystemObject” por meio da função CreateObject("Scripting.FileSystemObject"). Esse objeto permite o acesso a qualquer arquivo do sistema, não apenas a arquivos de texto.
- A linha 9 cria um objeto “TextStream”. A criação desse objeto está associada à criação do arquivo testfile.txt. Esse arquivo não é designado por um nome absoluto do tipo c:\dir1\dir2\....\testfile.txt, mas por um nome relativo, testfile.txt. Ele será, portanto, criado no diretório de onde será executado o comando para abrir o arquivo.
- O sistema de arquivos do Windows não reconhece conceitos como arquivo de texto ou arquivo não textual. Ele reconhece apenas arquivos. Portanto, cabe ao programa que utiliza esse arquivo determinar se ele será tratado como um arquivo 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 arquivo de texto envolve a 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” (arquivo de texto) pelo método OpenTextFile do objeto Scripting.FileSystemObject, que aceita vários parâmetros:
- o nome do arquivo a ser processado (obrigatório)
- o modo de utilização do arquivo. Trata-se de um número inteiro com três valores possíveis:
- 1: uso do arquivo em modo de leitura
- 2: uso do arquivo em gravação. Se ele ainda não existir e se o terceiro parâmetro estiver presente e tiver o valor true, ele será criado; caso contrário, não será. Se já existir, será sobrescrito.
- 8: uso do arquivo em modo de adição, c.a.d. Gravação no final do arquivo. Se o arquivo ainda não existir e se o terceiro parâmetro estiver presente e tiver o valor “true”, ele será criado; caso contrário, não será.
- A linha 11 grava uma linha de texto com o método WriteLine do objeto TextStream criado.
- A linha 13 “fecha” o arquivo. A partir daí, não é mais possível gravar ou ler nele.
- A linha 16 cria um novo objeto “TextStream” para operar o mesmo arquivo de antes, mas desta vez no modo “adição”. As linhas que forem escritas serão inseridas após as linhas existentes.
- A linha 18 grava duas novas linhas, sabendo que a constante vbCRLF é o marcador de fim de linha dos arquivos de texto.
- A linha 20 fecha o arquivo novamente
- a linha 23 o reabre no modo “leitura”: vamos ler o conteúdo do arquivo.
- A linha 27 lê uma linha de texto com o método ReadLine do objeto TextStream. Quando o arquivo acaba de ser “aberto”, o cursor está posicionado na primeira linha de texto do arquivo. Quando essa linha é lida pelo método ReadLine, o cursor passa para a segunda linha. Assim, o método Readline não apenas lê a linha atual, mas também “avança” automaticamente para a linha seguinte.
- Para processar todas as linhas de texto, o método ReadLine deve ser aplicado repetidamente em um loop. Esse loop (linha 26) termina quando o atributo AtEndOfStream do objeto TextStream assume o valor true. Isso significa, portanto, que não há mais linhas para serem lidas no arquivo.
6.2. Casos de erro
Existem dois casos frequentes de erro:
- abertura para leitura de um arquivo que não existe
- abertura para gravação ou adição de um arquivo que não existe, com o terceiro parâmetro definido como false na chamada ao método OpenTextFile.
O programa a seguir mostra como detectar esses erros:
6.3. O aplicativo IMPOTS com um arquivo de texto
Retomamos o aplicativo de cálculo de impostos, supondo que os dados necessários para o cálculo estejam em um arquivo de texto chamado 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, respectivamente, os dados das tabelas de limites coeffR e coeffN do aplicativo. Graças à modularização do nosso aplicativo, as alterações ocorrem essencialmente no procedimento getData, responsável pela construção das três tabelas. O novo programa é o seguinte:
Programa |
|
Observações:
- no arquivo de texto data.txt, os valores podem estar separados por um ou mais espaços, o que impossibilita o uso da função split para extrair os valores da linha. Foi necessário recorrer a uma expressão regular
- a função getData retorna, além das três tabelas de limites (coeffR, coeffN), um resultado indicando se houve erro ou não. Esse 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 algum erro.
- A função getData não verifica a validade dos valores encontrados no arquivo data.txt. Em uma situação real, ela deveria fazer isso.
