Fórum Delphi - incrementar nome da Variavelx do tipo String #570104
29/10/2016
0
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
Curtir tópico
+ 0Posts
29/10/2016
Robson Morais
var variavel : TStringList;
variavel := TStringList.create;
...
while not eof (linhaCadastro) do
begin
variavel.add(linhaCadastro);
end;
....
Gostei + 0
30/10/2016
Edney
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!
Gostei + 0
31/10/2016
Araujo Junior.
var variavel: array[1..3] of string;
Gostei + 0
31/10/2016
Edney
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!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)