You are on page 1of 9

13/07/2017 Esclarecimento sobre Array - Delphi - Frum iMasters

Esclarecimento sobre Array


Criado porJerfs,Junho 6, 2008

Jerfs1
Members
447 posts

PostadoJunho 6, 2008

Consigo criar uma array em tempo de execuo? quero poder criar quantas
arrays forem necessrias enquanto tiver executando o programa, consigo?!
Como?

Rodrigo Miss1
Members
1.270 posts

PostadoJunho 6, 2008

var

MeuArray: array[0..5] of string;


x: SmallInt;
begin
For x:= 0 to 5 do
begin
MeuArray[x]= 'A Posicao aqui a : ' + IntToStr(x);;;
end;

ShowMessage(MeuArray(4));

Jerfs1
Members
447 posts

PostadoJunho 6, 2008

Rodrigo valeu a ajuda, mas essa rotina que voc me passou est criando
apenas uma matriz no !? Desculpe minha ignorncia mas estou iniciando. O
que eu preciso criar matrizes de acordo com um parametro que
pesquisado atravs de um arquivo TXT. por exemplo, quando o txt tiver 5
grupos, eu terei de criar 5 arrays...

Discorpio1
Members
https://forum.imasters.com.br/topic/290423-esclarecimento-sobre-array/ 1/9
13/07/2017 Esclarecimento sobre Array - Delphi - Frum iMasters

159 posts

PostadoJunho 6, 2008

Bom dia Jerfs.



A nica coisa que eu sei, que voce pode redimencionar arrays dinmicos.

O que um array esttico e array dinmico ?

Array esttico quando ele declarado com os seus ndices j denidos,
assim:

var MeuArray: array[1..10] of String;

Aqui o array esttico porque o array j est delimitado com os ndices de 1 a


10.

Array dinmico quando ele declarado sem a denio dos seus ndices,
assim:

var MeuArray: array of String;

Nesse caso o array dinmico pode ser redimensionado a todo instante, e bom
disso tudo que, quando voce o dimensiona pela primeira vez e atribuir
valores aos seus ndices, ao redimension-lo novamente, os dados
anteriormente atribudos no se apagam. Mas como eu redimensiono um
array dinmico ? Com a funo SetLength, assim:

var MeuArray: array of String;


begin
SetLength(MeuArray, 10); // aqui os ndices so
definidos de 0 a 9;
MeuArray[0] := 'Jorge Abreu';
MeuArray[1] := 'Jerfs';
.......
.......
SetLength(MeuArray, 20); // aqui eu aumento os
ndices sem apagar os dados
MeuArray[11] := 'iMasters';
.....
.....
MeuArray[19] := 'Delphi'; // aqui o ltimo ndice do
array at o momento
end;

Agora a nica desvantagem disso tudo que os arrays (estticos ou


dinmicos) s podem ser declarados como um tipo de dado, ou seja, mesmo
voce o redimensionado a toda hora, ele s poder armazenar o mesmo tipo de
dado pelo qual foi declarado, se foi declarado como String, sempre

https://forum.imasters.com.br/topic/290423-esclarecimento-sobre-array/ 2/9
13/07/2017 Esclarecimento sobre Array - Delphi - Frum iMasters

armazenar String e se foi declarado como Integer, sempre armazenar


Integer, etc.

Pelo teor da sua pergunta, presumo que voce pretende criar vrios arrays de
diversos tipos, estou certo ?

Neste caso, creio eu que a soluo para o seu caso no utilizar o array puro
simplesmente, mas sim declarar um array como um tipo de dado, que muito
embora j esteja obsoleto na linguagem Object Pascal do Delphi, ele ainda
funciona nas suas novas verses, e acredito at que muitos usurios ainda o
utilizam, este tipo tornou-se obsoleto por causa dos bancos de dados, ou
seja, ele inicialmente fora criado para criar tabelas (array com tipos de dados
diferentes), eu estou falando do tipo Record e ele tem que ser denido com a
clusula Type, assim:

type
TMeuRegistro = Record
Nome: String;
Endereco: String;
...
...
Data_Nasc: TDate;
Cliente_Especial: Boolean;
end;

TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

Agora vai pode declarar um array dinmico como o tipo TMeuRegistro e


redimension-lo quantas vezes quiser, assim:

var
MeuRegistro: array of TMeuRegistro;
I: Integer;
begin
SetLength(MeuRegistro, 10);
for I := 0 to 9 do
begin
MeuRegistro[I].Nome := 'Jerfs';
MeuRegistro[I].Endereco := 'Av.
Paulista.....';
....
.......
.......
MeuRegistro[I].ClienteEspecial := True;
....

https://forum.imasters.com.br/topic/290423-esclarecimento-sobre-array/ 3/9
13/07/2017 Esclarecimento sobre Array - Delphi - Frum iMasters

end;
SetLength(MeuRegistro, 20);
for I := 10 to 19 do
begin
MeuRegistro[I].Nome := 'Delphi';
.....
.....
end;
end;

Bom, espero que isto sirva para o que voce pretende fazer.

Um abrao

Jerfs1
Members
447 posts

PostadoJunho 6, 2008

Discorpio, muito bom o que escreveu, certamente vou usar muito isso aqui
valeu mesmo! Mas o que preciso no momento : eu tenho um TXT, nele tenho
vrios parametros, atraves desses parametros (que so vriaveis) vou saber
quantas arrays vou precisar, ento ora precisarei de 4 arrays, ora precisarei de
200 arrays, uma coisa que no mudar o tipo de dados, sempre sero string.
Programo em Action Script, e l bem fcil fazer, simplesmente colocamos
dentro de um for os delimitadores e podemos criar quantas arrays forem
necessrias, mas em Delphi eu no tenho nem idia de como fazer isso... uma
outra coisa, depois de eu criar as arrays, para aliment-las, eu consigo
referenciar ao nome da array de forma dinamica?! por exemplo:

Para me referenciar a array grupo1 e inserir um valor na posio 10 dela...
(levar em considerao a array j criada)

CODE
var
i := 1;

Begin

'grupo'+i[10] := 'teste';

End;

https://forum.imasters.com.br/topic/290423-esclarecimento-sobre-array/ 4/9
13/07/2017 Esclarecimento sobre Array - Delphi - Frum iMasters

Em flash isso possvel, acredito que em delphi deva existir alguma forma de
se fazer isso... enm, no posso setar parametros xos para meu sistema,
preciso torn-lo o mais dinmico possivel, de forma que ele se molde com o
txt de parametros...

Conto com a colaborao de
todos...http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Jerfs1
Members
447 posts

PostadoJunho 6, 2008

Galera, estou pesquisando que nem um louco para saber se possvel fazer o
que quero... e cheguei a concluso de que o que quero 'criar vriavel em
tempo de execuo', isso possvel?

Discorpio1
Members
159 posts

PostadoJunho 6, 2008

Boa tarde Jerfs.



Creio que no Delphi isto no ser possvel.

Mas por que ?

Simples, o Object Pascal do Delphi uma das linguagens fortemente tipada,
ou seja, voce precisa declarar variveis, assim como os arrays, primeiro antes
de us-las, e esta declarao no pode ser feita dentro da implementao do
cdigo, ou seja, no em qualquer lugar dentro do cdigo do Delphi que voce
pode declarar variveis.

J dentro do Action Script e no Flash, assim como tambm na Linguagem
Java e no C, isto possvel porque voce declara classes e dentro do scopo
dela voce pode declarar variveis e j indo logo atribuindos valores, porm
dentro do Object Pascal isto no possvel, porque voce no pode declarar
variveis dentro da implementao do cdigo.

Um abrao.

Discorpio1
Members

https://forum.imasters.com.br/topic/290423-esclarecimento-sobre-array/ 5/9
13/07/2017 Esclarecimento sobre Array - Delphi - Frum iMasters

159 posts

PostadoJunho 6, 2008

Ol Jerfs, sou eu de novo.



Estive pessando que na vida tudo tem jeito, sempre h uma soluo.

Onde encontrei uma soluo para o seu caso, na prpria dica que postei ai, ou
seja, o tipo Record.

Voce no pode criar variveis e arrays bem como os Records tambm em
tempo de execuo.

Entretanto voce pode declarar um tipo Record e dimension-lo quantas vezes
quiser com um outro array dentro.

Assim oh:

type
TMeuRegistro = record
MeuArray: array of string;
end;

TForm1 = class(TForm)
private
{ Private declarations }
Grupo: array of TMeuRegistro;
public
{ Public declarations }
end;

Repare que eu dene o tipo record antes, bem como declarei um array Grupo
no bloco private da classe TForm1 como sendo do tipo do Record denido
como TMeuRegistro, ou seja, bem antes de implement-los.

Agora eu posso dimensionar e redimensionar tantos o Record TMeuRegistro
como o arrays MeuArray que est dentro dele, isto porque ambos so array
dinmicos.

Quando voce receber o parmetro do seu TXT, por exemplo 100 arrays, ento
dimensione a instncia Grupo que um array de TMeuRegistro para 100,
valendo lembrar que ser os ndices numerados de 0 a 99, ora dentro de cada
record no tem um array MeuArray ? Ento voce ter 100 arrays, resta saber
agora a quantidade de ndices que cada array ter, e isto voce pode tambm
dimensionar com a funo SetLength, assim:

var I: Integer;
begin
SetLength(Grupo, 100); // aqui depende da qtd de

https://forum.imasters.com.br/topic/290423-esclarecimento-sobre-array/ 6/9
13/07/2017 Esclarecimento sobre Array - Delphi - Frum iMasters

arrays do parmetro TXT

// aqui voce define o tamanho de cada array com 20


ndices
for I := 0 to 99 do SetLength(Grupo[I].MeuArray, 20);

// ou pode definir o tamanho de cada array com


ndices variados:
SetLength(Grupo[0].MeuArray, 10);
SetLength(Grupo[1].MeuArray, 20);
...........

end;

Agora voce pode atribuir bem como se referenciar a cada array desta Forma:

Grupo[9].MeuArray[10] := 'Delphi';

Espero que isso resolva

Jerfs1
Members
447 posts

PostadoJunho 9, 2008

Discorpio... muuito obrigado! chapou mesmo... deu pra ver que voc manja!
parabns!!! e denovo muito obrigado pela ateno. Deu certinho...

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Jerfs1
Members
447 posts

PostadoJunho 9, 2008

Porque d esse erro?



[ERROR] U_Princ.pas(407): Incompatible types: 'Char' and 'String'

Algum item desse modo que me passou s receber Char? estou trabalhando
com tudo no tipo string...

no sei no... mas acho que no consigo tratar cada campo (MyArray como
voc deniu no exemplo) como array... eles so campos simplesmente... eu
consegui no mximo concatenar strings no campos... mas no consegui criar

https://forum.imasters.com.br/topic/290423-esclarecimento-sobre-array/ 7/9
13/07/2017 Esclarecimento sobre Array - Delphi - Frum iMasters

indice, infelizmente! estou fazendo algo errado ser?! porque quando eu


coloco o indice no MyArray d esse erro que escrevi a em cima.

Discorpio1
Members
159 posts

PostadoJunho 9, 2008

Boa tarde Jerfs.



Tambm achei estranho porm voce precisa observar o seguinte: :o

Os tipos texto podem operar com caracteres simples ou grupos de
caracteres. O tipo texto padro o tipo string.

O Tipo Char um nico caractere ASCII

String um texto alocado dinamicamente, um vetor que pode ser limitado a
255 caracteres conforme congurao

PChar uma string terminada em nulo (#0), usada geralmente nas funes da
API do Windows. ;)

Contudo eu precisaria ver o cdigo que voce est tentando usar com a
funoSetLength, pois se esse erro acontece quando voce dimensiona o
array, ento com certeza o erro est na passagem de parmetros na funo
SetLength. :mellow:

Um abrao.

Jerfs1
Members
447 posts

PostadoJunho 11, 2008

Ol Discorpio,

Cara z o seguinte, usei um memo como uma matriz temporria... ento eu
crio a tal "matriz" dentro do memo, e depois ento que a matriz estiver pronta
eu gravo em arquivo (esse seria o porque criar as tais matrizes dinmicas).
Isso me atendeu... mas quero agradecer, muito obrigado mesmo pela
disponibilidade! Espero um dia poder fazer o mesmo pelos usurios do frum,
um dia eu chego l! rs

Abrao

https://forum.imasters.com.br/topic/290423-esclarecimento-sobre-array/ 8/9
13/07/2017 Esclarecimento sobre Array - Delphi - Frum iMasters

https://forum.imasters.com.br/topic/290423-esclarecimento-sobre-array/ 9/9

You might also like