Como criar um vetor/matriz dinamicamente. É possivel?
oi galera, eu queria saber se tem jeito de eu criar um vetor ou uma matriz dinamicamante,como eu faço isso ? isso e possivel?
:arrow: [color=red:e398f98f9a]Título alterado pelo Moderador oTTo. Removido ´vetor´.[/color:e398f98f9a]
:arrow: [color=red:e398f98f9a]Título alterado pelo Moderador oTTo. Removido ´vetor´.[/color:e398f98f9a]
Anicetojunior
Curtidas 0
Respostas
Flyskin
06/07/2004
Tem sim, só que vc precisará controlar os endereços de memória através de ponteiros. O comando é o new(var) onde a var é do tipo TPoiter. Este comando vem desde a época do turbopascal só que faz tempo que não utilizo. Dá uma olhada no help que provavelmente tem algo lá.
Espero que te ajude.
Espero que te ajude.
GOSTEI 0
Rômulo Barros
06/07/2004
É possível sim. Para isto, utilize o método SetLength(String or Array;NewLength)
procedure TForm1.StringGrid1Click(Sender: TObject); Var MeuVetor : array of string; begin SetLength(MeuVetor,1000); end
GOSTEI 0
Cabelo
06/07/2004
Caro Colega..
para utilizar um vetor deste tipo, declare em TYPES um vetor do Tipo Record..
type
r_teste = record
s_teste : char
end;
type
r_teste_1 = record
s_teste_1 : string;
s_teste_2 : array of r_teste;
end;
depois disso vc deve declarar uma variável em PUBLIC ou PRIVATE
s_v_teste : array ofr_teste_1;
depois no evento onCreate do Form que está declarado estas variáveis, vc deve utlizar assim :
por exemplo em dados :
for v_i := 0 to Query.recordcount - 1 do
begin
setlength(s_v_teste, length(s_v_teste) + 1);
with s_v_teste[v_i] do
begin
s_teste_1 := Query.fieldbyname(CAMPO).asstring;
for v_j := 0 to Query2.recordcount - 1 do
begin
setlength(s_v_teste[v_i].s_teste2, length(s_v_teste[v_i].s_teste2) + 1);
with s_v_teste[v_i].s_teste_2 do
begin
s_teste := Char(Query2.fieldbyname(CAMPO).asstring);
end;
end;
isto por exemplo seria um master detail de duas query´s distintas dentro de uma matriz..
espero ter ajudado..
sem mais
Cabelo
para utilizar um vetor deste tipo, declare em TYPES um vetor do Tipo Record..
type
r_teste = record
s_teste : char
end;
type
r_teste_1 = record
s_teste_1 : string;
s_teste_2 : array of r_teste;
end;
depois disso vc deve declarar uma variável em PUBLIC ou PRIVATE
s_v_teste : array ofr_teste_1;
depois no evento onCreate do Form que está declarado estas variáveis, vc deve utlizar assim :
por exemplo em dados :
for v_i := 0 to Query.recordcount - 1 do
begin
setlength(s_v_teste, length(s_v_teste) + 1);
with s_v_teste[v_i] do
begin
s_teste_1 := Query.fieldbyname(CAMPO).asstring;
for v_j := 0 to Query2.recordcount - 1 do
begin
setlength(s_v_teste[v_i].s_teste2, length(s_v_teste[v_i].s_teste2) + 1);
with s_v_teste[v_i].s_teste_2 do
begin
s_teste := Char(Query2.fieldbyname(CAMPO).asstring);
end;
end;
isto por exemplo seria um master detail de duas query´s distintas dentro de uma matriz..
espero ter ajudado..
sem mais
Cabelo
GOSTEI 0
Dopi
06/07/2004
No Clipper eu adorava os Vetores (ou arrays) dinámicos... No Delphi achei complicado usa-los... Mas os Objetos de Lista são muito melhores.... procure por TStringList, TObjectList, TList (ou semelhantes) no help do Delphi... são fantásticos...
GOSTEI 0
Anicetojunior
06/07/2004
Caro Colega..
para utilizar um vetor deste tipo, declare em TYPES um vetor do Tipo Record..
type
r_teste = record
s_teste : char
end;
type
r_teste_1 = record
s_teste_1 : string;
s_teste_2 : array of r_teste;
end;
depois disso vc deve declarar uma variável em PUBLIC ou PRIVATE
s_v_teste : array ofr_teste_1;
depois no evento onCreate do Form que está declarado estas variáveis, vc deve utlizar assim :
por exemplo em dados :
for v_i := 0 to Query.recordcount - 1 do
begin
setlength(s_v_teste, length(s_v_teste) + 1);
with s_v_teste[v_i] do
begin
s_teste_1 := Query.fieldbyname(CAMPO).asstring;
for v_j := 0 to Query2.recordcount - 1 do
begin
setlength(s_v_teste[v_i].s_teste2, length(s_v_teste[v_i].s_teste2) + 1);
with s_v_teste[v_i].s_teste_2 do
begin
s_teste := Char(Query2.fieldbyname(CAMPO).asstring);
end;
end;
isto por exemplo seria um master detail de duas query´s distintas dentro de uma matriz..
espero ter ajudado..
sem mais
Cabelo
como seria isso com uma tabela ?
GOSTEI 0
Cabelo
06/07/2004
Como assim :
Se vc estiver dizendo uma tabela no banco de dados seria exatamente como eu disse :
vc dá um select para filtrar os dados que vc deseja trazer do banco de dados.
aí vc declara as variávei assim :
type
r_dados = record
s_dados : string;
end;
depois disso vc deve declarar uma variável em PUBLIC ou PRIVATE
s_v_tabela : array of r_dados;
no form create
Query.SQL.ADD(´select CAMPO_QUERY from TABELA order by CAMPO_QUERY);
Query.Open;
for v_i := 0 to Query.recordcount - 1 do
begin
setlength(s_v_tabela, length(s_v_tabela) + 1);
s_v_tabela[v_i].s_dados := Query.fieldbyname(´CAMPO_QUERY´).asstring;
end;
end;
espero ter ajudado..
só lembre-se que vc deve ter o mesmo número de variáveis declaradas no vetor quento os campos do select..
se precisar poste suas dúvidas..
sem mais
Cabelo
Se vc estiver dizendo uma tabela no banco de dados seria exatamente como eu disse :
vc dá um select para filtrar os dados que vc deseja trazer do banco de dados.
aí vc declara as variávei assim :
type
r_dados = record
s_dados : string;
end;
depois disso vc deve declarar uma variável em PUBLIC ou PRIVATE
s_v_tabela : array of r_dados;
no form create
Query.SQL.ADD(´select CAMPO_QUERY from TABELA order by CAMPO_QUERY);
Query.Open;
for v_i := 0 to Query.recordcount - 1 do
begin
setlength(s_v_tabela, length(s_v_tabela) + 1);
s_v_tabela[v_i].s_dados := Query.fieldbyname(´CAMPO_QUERY´).asstring;
end;
end;
espero ter ajudado..
só lembre-se que vc deve ter o mesmo número de variáveis declaradas no vetor quento os campos do select..
se precisar poste suas dúvidas..
sem mais
Cabelo
GOSTEI 0
Gollum
06/07/2004
é possivel sim.
a sintaxe da criação de vetor Dinamico é .
var
Variavel : array of string;
begin
setlength(variavel,5);
variavel[0]:=´Dark´;
variavel[1]:=´Dada´;
variavel[2]:=´...´;
variavel[5]:=´Dom´;
showmessage(variavel[5]);
end;
a sintaxe da criação de vetor Dinamico é .
var
Variavel : array of string;
begin
setlength(variavel,5);
variavel[0]:=´Dark´;
variavel[1]:=´Dada´;
variavel[2]:=´...´;
variavel[5]:=´Dom´;
showmessage(variavel[5]);
end;
GOSTEI 0
Anicetojunior
06/07/2004
o que seria esse numero ´5´ no setlength(variavel,5) ? e o tamanho maximo desse vetor ?
GOSTEI 0
Cabelo
06/07/2004
Caro Colega..
O número cinco, é o tamanho máximo do seu vetor, portanto, seria necessário, vc utilizar exatamente como o colega Gollun passou, o problema é o seguinte, se vc quiser criar uma tabela de dados, em RUN Time, não tem como vc saber qual é o número máximo de registros que esta tabela irá conter, por isso é necessário vc criar um vetor do tipo record, assim como eu passei, pq com ele, não interessa quantos registros vc tiver na tabela, ele não irá parar de crescer..
além do que com ele vc cria matrizes, bem simples de utilizar..
sem muita mão de obra, vc deixa o processamento todo para o computador e não para suas mãos..
espero ter ajudado..
sem mais
Cabelo
O número cinco, é o tamanho máximo do seu vetor, portanto, seria necessário, vc utilizar exatamente como o colega Gollun passou, o problema é o seguinte, se vc quiser criar uma tabela de dados, em RUN Time, não tem como vc saber qual é o número máximo de registros que esta tabela irá conter, por isso é necessário vc criar um vetor do tipo record, assim como eu passei, pq com ele, não interessa quantos registros vc tiver na tabela, ele não irá parar de crescer..
além do que com ele vc cria matrizes, bem simples de utilizar..
sem muita mão de obra, vc deixa o processamento todo para o computador e não para suas mãos..
espero ter ajudado..
sem mais
Cabelo
GOSTEI 0