Arquivo Texto (*.txt)
No artigo Criando e Gravando dados em Txt com Delphi foi apresentado como realizar a criação e a gravação de dados em um arquivo texto
usando o identificador padrão TextFile. Neste segundo artigo que aborda este tema será demonstrado como recuperar os dados de arquivos que utilizam o formato txt.

Uma variável que representa um arquivo texto é declarada fazendo-se referência ao identificador padrão TextFile. As operações subsequentes sobre o arquivo devem ser precedidas por uma chamada ao procedimento AssignFile e os comandos para realizar a recuperação de dados devem ser precedidas da chamada ao procedimento Reset.

A lista com os principais procedimentos aplicados aos arquivos texto pode ser encontrada, novamente, no artigo Criando e Gravando dados em Txt com Delphi.

Para demonstrar a utilização dos procedimentos que manipulam arquivos texto em operações de entrada será desenvolvida uma aplicação Delphi para efetuar a leitura, da primeira até a última linha, de arquivos criados neste formato.


Desenvolvendo a Aplicação Delphi
Criar uma nova aplicação no ambiente de desenvolvimento Delphi 7 através da opção do menu "File|New|Application..." e realizar os dois passos descritos a seguir:

1º Passo:

Desenvolver o formulário principal da aplicação como sugere a Figura 1. Atenção: observe que as caixas de textos explicativos utilizadas na figura apresentam a ordem sequencial e o nome do componente, a página da sua localização e as propriedades que devem ser alteradas com os respectivos valores.

img
Figura 1. Formulário principal da aplicação.

2º Passo:
A interação de um programa com um dispositivo de armazenamento através de arquivos passa por três etapas: abertura do arquivo, leitura dos dados e fechamento do arquivo. A realização destas etapas e a utilização do procedimento readln para ler as linhas do arquivo, deverão ser implementadas no evento "onClick" do botão "Ler Arquivo", como mostra a Listagem 1.


Listagem 1. Procedimento do evento "onClick" do botão "Ler Arquivo".

procedure TForm1.Button1Click(Sender: TObject);
var   arq: TextFile; { declarando a variável "arq" do tipo arquivo texto }
    linha: string;
begin
  Memo1.Clear;

// [ 1 ] Associa a variável do programa "arq" ao arquivo externo "tabuada.txt"
//       na unidade de disco "d"
  AssignFile(arq, Edit1.Text);

  {$I-}         // desativa a diretiva de Input
  Reset(arq);   // [ 3 ] Abre o arquivo texto para leitura
  {$I+}         // ativa a diretiva de Input

  if (IOResult <> 0) // verifica o resultado da operação de abertura
     then Memo1.Lines.Add('Erro na abertura do arquivo !!!')
  else begin
// [ 11 ] verifica se o ponteiro de arquivo atingiu a marca de final de arquivo 
         while (not eof(arq)) do
         begin
           readln(arq, linha); // [ 6 ] Lê uma linha do arquivo

           Memo1.Lines.Add(linha);
         end;

         CloseFile(arq); // [ 8 ] Fecha o arquivo texto aberto
       end;
end;


Aspectos importantes da codificação apresentada na Listagem 1:
1) O procedimento Reset prepara um arquivo existente para leitura e coloca o ponteiro de arquivo no início. Caso o arquivo não exista, esta instrução provocará um erro de entrada/saída. Para proteger a execução do código evitando um eventual erro de abertura deve-se desligar a diretiva de compilação para operações de entrada (Input) através da instrução {$I-}.
2) Com a diretiva de Input desligada o resultado da operação de abertura do arquivo será retornado através da função IOResult. O retorno do valor 0 indica que o arquivo foi aberto com sucesso.
3) O processo de repetição, para ler "todas" as linhas do arquivo de texto, foi implementado através de uma instrução while com a expressão lógica not eof(arq) que encerra o processo de leitura sempre que o ponteiro do arquivo atingir a marca de fim-de-arquivo.

Executando a aplicação deve-se informar o nome do arquivo texto e pressionar o botão "Ler Arquivo". O conteúdo do arquivo lido será exibido nas linhas do componente Memo como pode ser observado nas duas figuras abaixo:
a) Figura 2 mostra o resultado da leitura do arquivo, "tabuada.txt" localizado na unidade "d", criado como exemplo no artigo Criando e Gravando dados em Txt com Delphi;
b) Figura 3 mostra o resultado da leitura do arquivo, "AloMundo.pas" localizado na unidade "d", que representa um código fonte escrito em Linguagem Pascal.


img
Figura 2. Ilustrando a execução da aplicação: lendo o arquivo "tabuada.txt".

img
Figura 3. Ilustrando a execução da aplicação: lendo o arquivo "AloMundo.pas".

Neste artigo a manipulação de arquivo texto foi implementada com o identificador padrão TextFile. Outra forma de implementação poderia ser realizada através da utilização da classe TStringList. Esta classe permite criar e manipular em memória uma lista de strings, como por exemplo, um arquivo texto. A Listagem 2 mostra o código necessário para carregar um arquivo texto em um componente Memo usando o método LoadFromFile da classe TStringList.

Listagem 2. Carregando um arquivo texto com o método LoadFromFile.


procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  try
    Memo1.Lines.LoadFromFile(Edit1.Text);
  except
    Memo1.Lines.Add('Erro na abertura do arquivo !!!');
  end;
end;