GARANTIR DESCONTO

Fórum Delphi - incrementar nome da Variavelx do tipo String #570104

29/10/2016

0

Pessoal,
gostaria de saber se no Delphi (tenho versão Xe7 mas deve ser igual pras demais) é possível armazenar várias linhas de um arquivo texto numa variável do tipo String e ir incrementando o nome da variável para não precisar declarar infinitas variáveis (uma para cada linha)... vou mostrar um pequeno exemplo do que pretendo via código pra ficar mais fácil de entender o que eu quero.


AO INVÉS DE UM CÓDIGO DESSE MODELO:

var
txt : textFile;
linhaCadastro : String;
variavel0, variavel1,variavel2, variavel3 : String; // na prática eu precisaria de mais variáveis
begin
AssignFile(txt,'C:\\CadastroGeral.txt');
reset(txt);
Readln(txt,linhaCadastro);
variavel0 := linhaCadastro;
Readln(txt,linhaCadastro);
variavel1 := linhaCadastro;
Readln(txt,linhaCadastro);
variavel2 := linhaCadastro;
Readln(txt,linhaCadastro);
variavel3 := linhaCadastro;
end;


EU GOSTARIA DE UM CÓDIGO DESSE MODELO:

var
i : Integer;
txt : textFile;
linhaCadastro : String;
variavel[] : String;
begin
i := 0;
AssignFile(txt,'C:\\CadastroGeral.txt');
reset(txt);
Readln(txt,linhaCadastro);
while not eof (linhaCadastro) do
begin
variavel[i] := linhaCadastro; // essa linha substituiria a necessidade de ter variavel0, variavel1, ... Essa variável seria seu nome mutável/incrementável
i := i +1;
end;
end;


Espero ter sido claro... será que é possível fazer algo desse tipo. No meu programa eu iria economizar muitas linhas de comando.
Edney

Edney

Responder

Posts

29/10/2016

Robson Morais

Utiliza uma StringList.


var variavel : TStringList;

variavel := TStringList.create;


...

while not eof (linhaCadastro) do
  begin
     variavel.add(linhaCadastro);
  end;
....

Responder

Gostei + 0

30/10/2016

Edney

Olá Rodrigo, obrigado pela ajuda.

Dessa maneira talvez funcione mas deva ser bem mais trabalhoso do que eu gostaria. Só explicando melhor... no arquivo texto irá ter centenas de nomes, e vinculados ao nome irá ter o seu email e telefone (os 3 em linhas diferentes). No arquivo irá ter várias outras linhas que não interessam, mas quando encontrar a linha NOME, irá adicionar esse nome num ListBox e armazenar as outras linhas EMAIL e TELEFONE numa variável. Quando a pessoa escolher algum dos nomes do ListBox, irá então mostrar o Email e o Telefone em Edits.

Ai eu queria fazer do tipo:
selecionou no LisBox a linha 10 => (LisBox.ItemIndex = 10)
então:
edit1.text := VariavelEmail[ListBox.ItemIndex]; //ou seja edit1 recebe a VariavelEmail[10]
edit2.text := VariavelCelularListBox.ItemIndex]; //ou seja edit2 recebe a VariavelCelular[10]

Por isso a variavel String (VariavelEmail e VariavelTelefone, na verdade) precisaria ser do tipo variavel[i]


Alguma outra dica, por favor?

Obrigado!
Responder

Gostei + 0

31/10/2016

Araujo Junior.

Isso que voce quer é um array de string.....declara a variavel assim:

var
variavel: array[1..3] of string;
Responder

Gostei + 0

31/10/2016

Edney

Olá,

consegui fazer o que eu queria, com a ideia parecida com o que o Robinho sugeriu:


...
while not (Copy(linhaCadastro,1,4) = '****') do // uma linha de asteriscos significa o fim do arquivo que me interessa
begin
Readln(txtCadastro,linhaCadastro);
if (Copy(linhaCadastro,1,4) = 'NOME') then // se as 4 primeiras letras = 'NOME', filtro e pego o nome
begin
ListBoxEmailMoradores.Items.Add(Copy(linhaCadastro,Pos('NOME MORADOR',linhaCadastro)+16,length(linhaCadastro)));
Readln(txtCadastro,linhaCadastro);
end;
if (Copy(linhaCadastro,1,4) = ' E-M') then // se as 4 primeiras letras = ' E-M', significa que é a linha e-mail. Filtro e armazeno
begin
ArmazenaEmail.Add(Copy(linhaCadastro,Pos(' E-MAIL: ',linhaCadastro)+9,length(linhaCadastro)));
Readln(txtCadastro,linhaCadastro);
end;
if (Copy(linhaCadastro,1,4) = ' CEL') then // se as 4 primeiras letras = ' CEL', significa que é a linha celular. Filtro e armazeno
begin
ArmazenaCelular.Add(Copy(linhaCadastro,Pos(' CELULAR: ',linhaCadastro)+10,length(linhaCadastro)));
end;
end;


Obrigado ao Robinho e ao Araujo pela ajuda!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar