Array
(
)

Ler arquivos textos. Como?

Paulo
   - 11 ago 2004

Tenho um arquivo texto, que precisa ser lido pela aplicação e depois alterar um campo data dentro dele. Esta data, será passada como string para a aplicação pois é melhor de se trabalhar assim. A pergunta é: Como ler um arquivo texto?(criar um loop) Eu sei gerar um, mas não sei como lê-lo e fazer o q deve ser feito(processo reverso). Este arquivo deve ser editado sempre pela minha aplicação. Além disso, tem como fazer um loop em um diretório? Tipo:
Num diretório, existem vários arquivos e eu preciso deletar, digamos 5 que comecem com i e p, por exemplo, num total de 50 arquivos. Como fazer um while, por exemplo ou repeat, para ir deletando nesta condição até que chegue ao final? Não sei deu para entender. Em realidade, são tabelas geradas pelo MySql, o qual algumas delas devem ser deletadas, pois elas não podem ser atualizadas(sobreescrita) no cliente. Hoje é feito um procedimento manual, e a minha função é automatizar isso, ou seja, que aplicação faça isso sozinha. Se não fui claro, poste a dúvida que troco em miúdos.


Motta
   - 11 ago 2004

duas soluções :

use assignfile , readln closefile - veja mais detalhes no help

use TStrings, método LoadfromFile e leia cada linha como um indice da TStrings.


Reginaldo174
   - 11 ago 2004

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 );
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
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 com registros de tamanho fixo a partir de bases de dados Paradox que usualmente não preenchem campos string com espaços no final.


Paulo
   - 11 ago 2004

Em realidade, eu preciso fazer isso(textos apos //), depois copiar todo este textro e jogar em outra pasta, chamada atualizada. Isto é feito todos os dias
[DATABASE]
host=127.0.0.1

[LOCAL]
#DIRETORIO DESTINO
Dir=C:\Arquivos de programas\Infoconsult\mysql\bin\downloads\

[INTERNET]
SITE DE ORIGEM
Dir=http://www.infoconsult.com.br/atu/

[TECAUTO]
AUTOCLOSE=1
DONTEXCLUDE=0
BUSCA=0
ATUTEC=0

[TEC]
Data em que a ultima atualização foi feita da Internet
Download=11/08/2004 //Trocar esta data
Data em que a ultima atualização foi atualizada no Banco de Dados
Atualizacao=11/08/2004 //Trocar esta dataHora Padrao para Baixar arquivos da TEC
Hora=19:31

[MOEDA]
Data em que a ultima atualização foi feita da Internet
Download=11/08/2004//Trocar esta data
#Data em que a ultima atualização foi atualizada no Banco de Dados
Atualizacao=11/08/2004//Trocar esta dataHora Padrao para Baixar arquivos da MOEDA
Hora=08:30

[DOWNLOAD]
Tipo=0

[PROXY]
UseProxy=1
ProxyServer=
ProxyPort=
UseProxyPass=0
ProxyUserName=
ProxyUserPass=

[ARQUIVO]
Versão=2


Rafs
   - 11 ago 2004

Se não for, este arquivo que vc tem, tem a estrutura de um arquivo INI.
Utilize TIniFile para poder acessar os dados.
Os comandos que você deverá utilzar são ReadDate e WriteDate.