Fórum Incrementando parametros automaticamente em uma função antes dela ser executada #444385
31/05/2013
0
Estou criando uma função que captura parâmetros de um arquivo TXT. Então, basicamente eu encontro o cabeçalho no arquivo, e capturo as informações nas linhas abaixo: Exemplo do código:
function TForm1.GetNome(linha: string): string;
begin
linha:= Copy (linha, Pos('"', linha) +1, Length(linha));
Delete(linha, Pos('"', linha), Length(linha));
result:= linha;
end;
function TForm1.GetTelefone(linha: string): string;
begin
linha:= Copy (linha, Pos('Tel', linha) +5, Length(linha));
Delete(linha, Pos(' Cpf', linha), Length(linha));
result:= linha;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Arquivotxt: TStringList; I: Integer;
begin
Arquivotxt := TStringList.Create;
Arquivotxt.LoadFromFile('clientes');
try
for I := 0 to Arquivotxt.count do
begin
if Arquivotxt[I] = 'cliente (' then
Begin
Edit1.Text:= GetNome(Arquivotxt[I +1]);
Edit2.Text:= GetTelefone (Arquivotxt[I +3]);
End;
end;
finally
FreeAndNil(Arquivotxt);
end;
A grande questão é a seguinte. Para eu capturar os dados, eu preciso incrementar manualmente a numeração da linha, após a identificação da marca que inicia a função. Como existem muitas linhas (GetNome(Arquivotxt[I +1]), GetTelefone (Arquivotxt[I +3] dentre muitos outros, a chance de acontecer um erro utilizando estas funções é muito grande.
Existiria uma forma de incrementar automaticamente o índice do TStringList no próprio parâmetro da função:
Exemplo primitivo da ideia:
function TForm1.GetNome( (linha[x +1]): string): string;
Minha ideia é passar o parâmetro primitivo na função "Arquivotxt[I]" e automaticamente a função entenda que ele deve capturar a string Arquivotxt[I+1]...
Isso é possível??
Obs. Eu não gostaria de passar a TStringList inteira para função, pois o arquivo é muito extenso, e ocorreria problemas de performance e péssimo gerenciamento de memória, pois o loop consequentemente é longo, ultrapassando 15000 linhas.
Agradeço a atenção...
function TForm1.GetNome(linha: string): string;
begin
linha:= Copy (linha, Pos('"', linha) +1, Length(linha));
Delete(linha, Pos('"', linha), Length(linha));
result:= linha;
end;
function TForm1.GetTelefone(linha: string): string;
begin
linha:= Copy (linha, Pos('Tel', linha) +5, Length(linha));
Delete(linha, Pos(' Cpf', linha), Length(linha));
result:= linha;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Arquivotxt: TStringList; I: Integer;
begin
Arquivotxt := TStringList.Create;
Arquivotxt.LoadFromFile('clientes');
try
for I := 0 to Arquivotxt.count do
begin
if Arquivotxt[I] = 'cliente (' then
Begin
Edit1.Text:= GetNome(Arquivotxt[I +1]);
Edit2.Text:= GetTelefone (Arquivotxt[I +3]);
End;
end;
finally
FreeAndNil(Arquivotxt);
end;
A grande questão é a seguinte. Para eu capturar os dados, eu preciso incrementar manualmente a numeração da linha, após a identificação da marca que inicia a função. Como existem muitas linhas (GetNome(Arquivotxt[I +1]), GetTelefone (Arquivotxt[I +3] dentre muitos outros, a chance de acontecer um erro utilizando estas funções é muito grande.
Existiria uma forma de incrementar automaticamente o índice do TStringList no próprio parâmetro da função:
Exemplo primitivo da ideia:
function TForm1.GetNome( (linha[x +1]): string): string;
Minha ideia é passar o parâmetro primitivo na função "Arquivotxt[I]" e automaticamente a função entenda que ele deve capturar a string Arquivotxt[I+1]...
Isso é possível??
Obs. Eu não gostaria de passar a TStringList inteira para função, pois o arquivo é muito extenso, e ocorreria problemas de performance e péssimo gerenciamento de memória, pois o loop consequentemente é longo, ultrapassando 15000 linhas.
Agradeço a atenção...
Cesar Peixoto
Curtir tópico
+ 0
Responder
Posts
31/05/2013
Lorival Filho
envia exemplo do arquivo txt
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)