Este artigo é para o desenvolvedor de principiante a intermediário que quer ler/escrever/imprimir e apagar um arquivo texto. Espero que seja útil a muitos desenvolvedores.
Agora, mostrarei a você os comandos básicos para leitura e gravação. É muito, muito fácil.
Rotinas Genéricas de I/O
AssignFile Atribui o nome de um arquivo externo a uma variável de arquivo.
Para começar a trabalhar com arquivos-texto a partir do KYLIX, devemos criar uma ligação de um arquivo em disco com uma variável de arquivo em nosso programa. Para criar esta ligação, devemos primeiro declarar uma variável do tipo TextFile, e então utilizar o procedimento AssignFile a fim de associar um arquivo em um disco com uma variável de arquivo. Se o arquivo de nome FileName não estiver no diretório corrente, devemos fornecer o caminho completo.
Reset Abre um arquivo existente (para leitura)
Para ler informações de um arquivo linha por linha, devemos abrir o arquivo como entrada, utilizando o procedimento Reset. O Reset abre o arquivo existente com o nome atribuído à variável TextFile. Um erro resulta se não existir o arquivo externo com o nome dado.
Rewrite Cria e abre um novo arquivo (ou abre e zera um arquivo existente!)
Rewrite cria um novo arquivo (abre o arquivo para saída) com o nome atribuído a Openfile. Se um arquivo com o mesmo nome já existir, este é eliminado e um novo arquivo, vazio, é criado em seu lugar. Se SomeTextFile já estiver aberto, primeiro é fechado e então re-criado. A posição corrente do arquivo é definida para o começo do arquivo vazio.
WriteLn Escreve uma linha no arquivo texto.
O comando WriteLn envia pedaços de informação individual para um arquivo.
ReadLn Lê uma linha de um arquivo texto.
ReadLn lê informações linha por linha de um arquivo.
Eof Retorna o status de end-of-file (final do arquivo) (True implica final de arquivo).
Eof é a função de verificação de EndOfFile. Podemos usar esta função para ter certeza de que não estamos tentando ler depois do final do arquivo.
OpenFile.EOF
CloseFile Fecha um arquivo aberto.
Close Fecha a ligação de OpenFile.
AssignPrn Atribui o arquivo a uma impressora.
Erase Elimina um arquivo externo.
Todas estas rotinas estão na SysUtils, exceto "Assignprn". Para esta você tem que acrescentar a unidade "QPrinters" na seção de unidades.
Os seguintes exemplos mostram como salvar e carregar um TMemo do aquivo, "do jeito difícil".
Você poderia, é claro, usar os métodos SaveToFile e LoadFromFile de TStrings, mas então você não aprenderia sobre a E/S de arquivo, e muitos programadores têm 2 problemas:
- Como imprimir o conteúdo de TMEMO e Salvar em ARQUIVOS TEXTO...
- Como JOGAR COM ARQUIVOS TEXTO em KYLIX.
Desta maneira você aprenderá...
- Como Salvar / Recuperar conteúdos TMEMO em um ARQUIVO TEXTO
- Como imprimir o conteúdo de TMEMO através de um Programa.
- Como Criar / Escrever / Ler / Imprimir e Apagar ARQUIVOS TEXTO.
- Criando e Escrevendo Conteúdo Em um Arquivo Texto
Assegura que OutFile sempre estará fechado, mesmo se uma exceção ocorrer enquanto estiver sendo feita gravação no arquivo.
{ SaveToFile:
Este procedimento salva os conteúdos de um Memo em um dado Caminho e Nome de arquivo
}
procedure SaveToFile(MemoName : TMemo; FileName : string);
var
OpenFile : TextFile; { O arquivo texto }
Counter : integer; { Contador do Loop }
begin
AssignFile(OpenFile, FileName); { Associa OpenFile a um dado Caminho e Nome de arquivo }
Rewrite(OpenFile); { Abre o arquivo }
try
try
for Counter := 0 to MemoName.Lines.Count - 1 do
Writeln(OpenFile, Memoname.Lines[Counter]);
application.MessageBox('Memo salvo no arquivo texto ' + FileName );
except on E:EInOutError do
MessageDlg('Salvamento abortado com erro: ' + IntToStr(E.ErrorCode)
, mtError, [mbOK], 0);
end;
finally
CloseFile(OpenFile);
end;
end;
- Lendo conteúdo de um arquivo texto. Finalmente, exte exemplo mostra como reverter o processo de ler o texto de um arquivo. Observe que Readln copia todo o texto sem incluir a marca de final de linha para a string dada. Assim, o comando evita a marca de final de linha, se esta existir. Se não houver uma marca de final de linha, então EOF torna-se True.
{ ReadFromFile:
Este procedimento lê conteúdos de um dado Caminho e Nome de arquivo
}
procedure ReadFromFile(MemoName : TMemo; FileName : string);
var
OpenFile : TextFile; { O arquivo texto }
Line : string; { A linha lida }
begin
MemoName.Lines.Clear; { Esvazia o memo }
AssignFile(OpenFile, FileName); { Associa OpenFile a nome de arquivo }
Reset(OpenFile); { Abre o arquivo sem fazer extensa utilização }
try
try
while not Eof(OpenFile) do
begin
Readln(OpenFile,Line);
MemoName.Lines.Add(Line);
end;
except on E:EInOutError do
MessageDlg('Não é possível ler erro: ' + IntToStr(E.ErrorCode)
, mtError, [mbOK], 0);
end;
finally
CloseFile(openFile);
end
end;
- Imprimindo o Arquivo Texto. Uma vantagem dos objetos Pascal arquivo texto, que eu não mencionei, é que podem ser utilizados para enviar dados diretamente para os dispositivos. O exemplo abaixo mostra como enviar texto diretamente para a impressora.
{ PrintMemo:
Este procedimento lê conteúdos de Memo e o imprime
}
procedure PrintMemo(MemoName : TMemo; FileName : string);
var
OpenFile : TextFile; { O arquivo texto}
Counter : integer; { Contador do Loop }
begin
AssignPrn(OpenFile); {a unidade QPrinters atribui o arquivo texto a PRN }
Rewrite(OpenFile); { Abre o arquivo }
try
try
for Counter := 0 to MemoName.Lines.Count - 1 do
Writeln(OpenFile,MemoName.Lines[Counter]);
except on E:EInOutError do
MessageDlg('Não é possível imprimir erro: ' + IntToStr(E.ErrorCode)
, mtError, [mbOK], 0);
end;
finally
CloseFile(OpenFile);
end;
end;
Observe que, neste caso, eu utilizo AssignPrn em vez de AssignFile. Tendo feito isto, você pode simplesmente escrever na impressora como se esta fosse um arquivo texto "normal".
- Apagar um arquivo texto.
procedure EraseFile(FileName : string);
var
OpenFile : TextFile; { O arquivo texto}
begin
if FileExists(FileName ) then
begin
AssignFile(OpenFile, FileName); { Associa OpenFile ao nome de arquivo }
try
Reset(OpenFile); { Abre sem fazer utilização extensiva }
CloseFile(openfile);
Erase(Openfile);
application.MessageBox(FileName + ' ! DELETED ');
except on E:EInOutError do
MessageDlg('Não é possível apagar erro: ' + IntToStr(E.ErrorCode)
, mtError, [mbOK], 0);
end;
end
else
application.MessageBox('ERRO ! ' + FileName + ' ! Não Encontrado');
end;
- Como obter o caminho da aplicaçãoprocedure EraseFile(FileName : string);
var
OpenFile : TextFile; { Arquivo Texto}
begin
if FileExists(FileName ) then
begin
AssignFile(OpenFile, FileName); { Associa OpenFile ao nome de arquivo }
try
Reset(OpenFile); { Abre sem fazer utilização extensiva }
CloseFile(openfile);
Erase(Openfile);
application.MessageBox(FileName + ' ! APAGADO ');
except on E:EInOutError do
MessageDlg('Não é possível apagar erro: ' + IntToStr(E.ErrorCode)
, mtError, [mbOK], 0);
end;
end
else
application.MessageBox('ERRO ! ' + FileName + ' ! Não encontrado');
end;
Boa programação!