Índice de Aulas  Próxima Aula  Aula Anterior  Página Principal


Aula 10

Arquivos de Texto

Arquivos do tipo texto guardam os dados com base no código Ascii. Estes arquivos podem ter seus dados visualizados e modificados por editores Ascii.

Declarando um arquivo

Para declarar um arquivo:

1- Usamos um identidicador ( Nome_Interno_do_arquivo )
2- Indicamos que ele é arquivo através da palavra reservada Text

Sintaxe:

Var

Nome_Interno_do_arquivo : Text;

Exemplo:

Program  Declarando_um_arquivo;

Var

Arquivo_de_texto: Text;

Begin

End.

Associando um arquivo ao nome externo

Todo arquivo tem um nome externo associado a ele, que é gravado em uma memória auxiliar. Ex: dados.txt . Tudo que é feito dentro do programa com a variável Nome_Interno_do_arquivo é refletido em um arquivo externo. O comando que faz esta associação é o Assign

Sintaxe:

Assign ( Nome_Interno_do_arquivo, 'Path_do_nome_externo_do_arquivo' );

Exemplo:

Program  Associando_um_arquivo;

Var

Arquivo_de_texto: Text;

Begin

Assign (Arquivo_de_texto, 'C:\notas.txt');

End.

Criando um arquivo na memória auxiliar

Para criar um arquivo em uma memória auxiliar usamos o comando Rewrite . Este comando cria e abre o arquivo para escrita. Se o arquivo já existir, o seu conteúdo será apagado. Para usar este comando é necessário que o Nome_Interno_do_arquivo já tenha sido associado ao seu nome_externo usando o comando Assign

Sintaxe:

Rewrite ( Nome_Interno_do_arquivo );

Exemplo:

Program  Criando_um_arquivo;

Var

Arquivo_de_texto: Text;

Begin

Assign ( Arquivo_de_texto, 'C:\Notas.txt' );
Rewrite ( Arquivo_de_texto );

{ Se você der um Dir na raiz ( C:\Dir ) verá que foi criado o arquivo notas.txt }

End.

Abrindo um arquivo para leitura

Para abrir um arquivo que já existe usamos o comando Reset . Se o arquivo não exitir ocorrerá um erro. Para usar este comando é necessário que o Nome_Interno_do_arquivo já tenha sido associado ao seu nome_externo usando o comando Assign

Sintaxe:

Reset ( Nome_Interno_do_arquivo );

Obs: Diferente do que ocorre com os arquivos binários, o comando reset abre o arquivo somente para a leitura de dados. Para escrever dados é necessário abrir o arquivo com o comando Append

Exemplo:

Program  Abrindo_um_arquivo_para_leitura;

Var

Arquivo_de_texto: Text;

Begin

Assign ( Arquivo_de_texto, 'C:\Notas.txt' );
Reset ( Arquivo_de_texto);

{ Se o arquivo não existir ocorrerá um erro na execução }

End.

Abrindo um arquivo para escrita

Para abrir um arquivo que já existe usamos o comando Append . Se o arquivo não exitir ocorrerá um erro. Para usar este comando é necessário que o Nome_Interno_do_arquivo já tenha sido associado ao seu nome_externo usando o comando Assign

Sintaxe:

Append ( Nome_Interno_do_arquivo );

Obs: O Append abre o arquivo e "aponta" para o fim do mesmo.

Exemplo:

Program  Abrindo_um_arquivo_para_escrita;

Var

Arquivo_de_texto: Text;

Begin

Assign ( Arquivo_de_texto,'C:\Notas.txt' );
Append ( Arquivo_de_texto);

{ Se o arquivo não existir ocorrerá um erro na execução }

End.
 

Fechando um um arquivo

Depois de  abrir  e manipular o arquivo devemos fecha-lo com o comando Close

Sintaxe:

Close ( Nome_Interno_do_arquivo );

Gravando dados em um arquivo

Para gravar dados em um arquivo usamos o comando Write ou WriteLn. Para utilizar estes comandos é necessário abir o arquivo  que a depender do caso , se ele já existe ou não ,  pode ser feito com os comando Rewrite ou Append

Sintaxe:

Write( Nome_Interno_do_arquivo, Variável_Auxiliar1, Variável_Auxiliar2, ..., Variável_Auxiliarn );
Writeln( Nome_Interno_do_arquivo,Variável_Auxiliar1,Variável_Auxiliar2, ..., Variável_Auxiliarn );

Os dados que estam nas Variáveis_Auxiliares são gravados no arquivo de forma sequencial , isto é, um atrás do outro. Estas variáveis devem ser de tipo simples ou um elemento de uma variável estruturada.

Obs: A diferença entre o Write e o Writeln é que este último grava o dado no arquivo e aponta para a proxima linha.

Exemplo:

Program  Gravando_dados;

Var

Arquivo_de_texto: Text;
numero,idade : Integer;

Begin

Assign (Arquivo_de_texto,'C:\Notas.txt' );
Append (Arquivo_de_texto);

{ Suponho que o arquivo já exista . Caso contrário use o comando Rewrite no lugar do Append }

Write('Digite o seu numero da sorte - ');
Readln(numero);
Write('Digite a  sua idade - ');
Readln(idade);
Write (Arquivo_de_texto, numero,idade); { Escreve no fim do arquivo }
Write('Digite outro numero - ');
Readln(numero);
Writeln(Arquivo_de_texto, numero); { Escreve no fim do arquivo e aponta para proxima linha }
Write('Digite a idade de sua namorada - ');
Readln(idade);
Write(Arquivo_de_texto, idade);
{ Escreve na próxima linha do arquivo pois, anteriormente foi usado o Writeln }
Close(Arquivo_de_texto);
End.

Lendo dados de um arquivo

Para ler os dados de um arquivo usamos o comando Read ou ReadLn. Para utlizar este comando é necessário abir o arquivo usando o comando Reset

Sintaxe:

Read ( Nome_Interno_do_arquivo,Variável_Auxiliar1,Variável_Auxiliar2, ..., Variável_Auxiliarn  );

Os dados que estam no arquivo são gravados nas Variáveis_Auxiliares de forma sequencial.
 

Exemplo:

Program  Lendo_dados_Com_O_Read;

Var

Arquivo_de_numeros:Text;
Num1, Num2, Num3: Integer;

Begin

Assign (Arquivo_de_numeros, 'C:\notas.txt');
Reset (Arquivo_de_numeros );
{ Suponho que o arquivo já exista . Caso contrário use um editor ascii e crie o arquivo }
Read ( Arquivo_de_numeros, num1,num2,num3);
Close( Arquivo_de_numeros );
Write('Os numeros armazenados eram - ',num1,' ',num2,' ',num3);
End.

Observações: Quando usamos o comando Read e variáveis numéricas ( integer, real, comp, etc) este comando ignora os espaços em branco e procura apenas numeros no arquivo texto porém, se algum outro caracter ( não numerico )  for encontrado ocorrerá um erro pois o tipo numérico é incompatível com o tipo caracter. Se usarmos variáveis de caracter como Char ou String este erro não ocorrerá porém os brancos não serão desconsiderados e você precisará utilizar o comando Readln para mudar de linha.

Sintaxe

Readln ( Nome_Interno_do_arquivo,Variável_Auxiliar1,Variável_Auxiliar2, ..., Variável_Auxiliarn);

Os dados que estam no arquivo são gravados nas Variáveis_Auxiliares de forma sequencial e depois aponta para a próxima linha.

Program  Lendo_dados_Com_O_Readln;

Var

Arquivo_de_numeros:Text;
Num1, Num2, Num3:Char;

Begin

Assign (Arquivo_de_numeros,'C:\notas.txt');
Reset (Arquivo_de_numeros );
{ Suponho que o arquivo já exista . Caso contrário use um editor ascii e crie o arquivo }
Readln( Arquivo_de_numeros,num1,num2);
{ Le o 1º e o 2º caracter da 1º linha e aponta pra segunda linha }
Read(Arquivo_de_numeros,num3);
{ Le o 1º caracter da 2º linha pois, anteriormente foi usado o comando Readln }
Close( Arquivo_de_numeros );
Write(' Os números armazenados eram - ',num1,' ',num2,' ',num3);
End.
 

Acesso Direto aos arquivos

Notícia triste! : ( . Não existe acesso direto em arquivos texto. Não existe um comando análogo ao Seek dos arquivos binários. Pra acessar arquivos texto tem que ser sequencialmente. Os dados são lidos um atrás do outro.

Complementos:

Eof  ( End of  File - Fim do Arquivo ) é  uma função que retorna o verdadeiro ( True ) se tiver atingido o fim do arquivo ou se ele estiver vazio senão retorna falso ( False )

Sintaxe:

Eof ( Nome_Interno_do_Arquivo);
 

EoLn  ( End of  Line - Fim da Linha ) é  uma função que retorna o verdadeiro ( True ) se tiver atingido o fim da linha ou  o fim do arquivo senão retorna falso ( False )

Sintaxe:

EoLn ( Nome_Interno_do_Arquivo);



Índice de Aulas  Próxima Aula  Aula Anterior  Página Principal