lendo e gravando arquivos de texto em delphi

4
Lendo e gravando arquivos de texto em Delphi Existem vários métodos em Delphi para gravar arquivos texto a partir de informações gravadas em bases de dados ou para ler arquivos texto e armazená-los em bases de dados. Esta dica apresenta um destes métodos: o uso de TextFiles. TextFile é um tipo de dado pré-definido no Delphi e corresponde ao tipo Text do Turbo Pascal e do Object Pascal. Inicialmente para acessar um arquivo de texto, você precisa definir uma variável tipo TextFile, no local que você achar mais apropriado, da seguinte forma: var arq: TextFile; Vamos precisar também de uma variável tipo string para armazenar cada linha lida do arquivo: var linha: String; Antes de se iniciar a leitura do arquivo , precisamos associar a variavel TextFile com um arquivo fisicamente armazenado no disco: AssignFile ( arq, 'C:AUTOEXEC.BAT' ); Reset ( arq ); A rotina AssignFile faz a associação enquanto Reset abre efetivamente o arquivo para leitura. AssignFile corresponde à Assign do Turbo Pascal. Em seguida é necessário fazer uma leitura ao arquivo, para isto utilizaremos a procedure ReadLn: ReadLn ( arq, linha );

Upload: sirmenon

Post on 31-Oct-2015

255 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Lendo e Gravando Arquivos de Texto Em Delphi

Lendo e gravando arquivos de texto em DelphiExistem vários métodos em Delphi para gravar arquivos texto a partir de informações gravadas em bases de dados ou para ler arquivos texto e armazená-los em bases de dados. Esta dica apresenta um destes métodos: o uso de TextFiles.

TextFile é um tipo de dado pré-definido no Delphi e corresponde ao tipo Text do Turbo Pascal e do Object Pascal.

Inicialmente para acessar um arquivo de texto, você precisa definir uma variável tipo TextFile, no local que você achar mais apropriado, da seguinte forma:

var arq: TextFile;

Vamos precisar também de uma variável tipo string para armazenar cada linha lida do arquivo:

var linha: String;

Antes de se iniciar a leitura do arquivo, precisamos associar a variavel TextFile com um arquivo fisicamente armazenado no disco:

AssignFile ( arq, 'C:AUTOEXEC.BAT' ); Reset ( arq );

A rotina AssignFile faz a associação enquanto Reset abre efetivamente o arquivo para leitura. AssignFile corresponde à Assign do Turbo Pascal. Em seguida é necessário fazer uma leitura ao arquivo, para isto utilizaremos a procedure ReadLn:

ReadLn ( arq, linha );

O comando acima lê apenas uma linha de cada vez, assim precisamos de um loop para efetuar várias leituras até que o arquivo acabe. Para verificar o fim do arquivo, utilizaremos a função Eof:

while not Eof ( arq ) do

Agora uma rotina quase completa para fazer a leitura de um arquivo texto. Esta rotina recebe como parâmetro o nome do arquivo que será lido:

procedure percorreArquivoTexto ( nomeDoArquivo: String ); var arq: TextFile; linha: String; begin

Page 2: Lendo e Gravando Arquivos de Texto Em Delphi

AssignFile ( arq, nomeDoArquivo ); Reset ( arq ); ReadLn ( arq, linha ); while not Eof ( arq ) do begin { Processe a linha lida aqui. } { Para particionar a linha lida em pedaços, use a função Copy. } ReadLn ( arq, linha ); end; CloseFile ( arq ); end;

E também uma rotina quase completa para gravação de um arquivo texto. Esta rotina recebe como parâmetro o nome do arquivo que será gravado e uma tabela (TTable) de onde os dados serão lidos:

procedure gravaArquivoTexto ( nomeDoArquivo: String; tabela: TTable ); var arq: TextFile; linha: String; begin AssignFile ( arq, nomeDoArquivo ); Rewrite ( arq ); tabela.First; while not tabela.Eof do begin Write ( arq, AjustaStr ( tabela.FieldByName ( 'Nome' ).AsString, 30 ) ); Write ( arq, FormatFloat ( '00000000.00', tabela.FieldByName ( 'Salario' ).AsFloat ) ); WriteLn ( arq ); tabela.Next; end; CloseFile ( arq ); end;

Note nesta segunda rotina, a substituição de Reset por Rewrite logo após o AssignFile. Rewrite abre o arquivo para escrita, destruindo tudo que houver lá anteriormente .

Note também o uso de Write e WriteLn para gravar dados no arquivo texto.

Finalmente note o uso de AjustaStr e FormatFloat para garantir que campos string e numericos sejam gravados com um número fixo de caracteres. FormatFloat é uma rotina do próprio Delphi enquanto AjustaStr está definida abaixo:

function AjustaStr ( str: String; tam: Integer ): String; begin while Length ( str ) < tam do str := str + ' '; if Length ( str ) > tam then str := Copy ( str, 1, tam ); Result := str; end;

O uso da função AjustaStr é fundamental quando você estiver gravando arquivos texto

Page 3: Lendo e Gravando Arquivos de Texto Em Delphi

com registros de tamanho fixo a partir de bases de dados Paradox que usualmente não preenchem campos string com espaços no final.

Pesquisar Palavras em Arquivos TextosVeja nesta dica um exemplo simples de como criar um código que localiza uma palavra ou frase dentro de um arquivo texto

Código HTML:procedure TForm1.Button1Click(Sender: TObject);var S, SS: string; vCount, P: Integer; Arq: TextFile;begin //contador das palavras vCount := 0; //pega a palavra/frase no edit, convertendo tudo para minúsculo SS := LowerCase(EdtNome.Text); //associa o arquivo texto pelo caminho especificado AssignFile(Arq, 'C:\teste.txt'); //abre o arquivo Reset(Arq); try //enquanto não alcançar o final do arquivo while not Eof(Arq) do begin //lê a linha Readln(Arq, S); //converte-a para minúsculo, para ficar igual ao Edit S := LowerCase(S); //executa o laço percorrendo a linha e contando as palavras/frases while S <> '' do begin P := Pos(SS, S); if P = 0 then Break; Inc(vCount); Delete(S, 1, P + Length(SS)); end; end; finally //fecha o arquivo CloseFile(Arq); end; //mostra a mensagem dizendo se encontrou ou não as palavras //e quando encontrar, mostra a quantidade encontrada (vCount) if vCount = 0 then ShowMessage('Não foi encontrada a palavra: "' + SS + '"') else ShowMessage('Número de palavras encontradas: ' + IntToStr(vCount));end;

Page 4: Lendo e Gravando Arquivos de Texto Em Delphi