You are on page 1of 9

13/07/2017 Esclarecimento sobre Array - Delphi - Fórum iMasters

Esclarecimento sobre Array
Criado por Jerfs, Junho 6, 2008

Jerfs     1
Members
447 posts

Postado Junho 6, 2008

Consigo criar uma array em tempo de execução? quero poder criar quantas
arrays forem necessárias enquanto tiver executando o programa, consigo?!
Como?

 0

Rodrigo Miss     1
Members
1.270 posts

Postado Junho 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));

 0

Jerfs     1
Members
447 posts

Postado Junho 6, 2008

Rodrigo valeu a ajuda, mas essa rotina que você me passou está criando
apenas uma matriz não é!? Desculpe minha ignorância mas estou iniciando. O
que eu preciso é criar matrizes de acordo com um parametro que é
pesquisado através de um arquivo TXT. por exemplo, quando o txt tiver 5
grupos, eu terei de criar 5 arrays...

 0

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

// aqui o último índice do array até o momento end. assim:   var MeuArray: array[1..Fórum iMasters 159 posts Postado Junho 6. . SetLength(MeuArray.com. assim:   var MeuArray: array of String.10] of String. Aqui o array é estático porque o array já está delimitado com os índices de 1 a 10. // aqui eu aumento os índices sem apagar os dados MeuArray[11] := 'iMasters'.. Mas como eu redimensiono um array dinâmico ? Com a função SetLength. .. 10).   A única coisa que eu sei.. Agora a única desvantagem disso tudo é que os arrays (estáticos ou dinâmicos) só podem ser declarados como um tipo de dado.. MeuArray[1] := 'Jerfs'..... begin SetLength(MeuArray. 2008 Bom dia Jerfs.   O que é um array estático e array dinâmico ?   Array estático é quando ele é declarado com os seus índices já definidos.. e bom disso tudo é que.   Array dinâmico é quando ele é declarado sem a definição dos seus índices. sempre https://forum. // aqui os índices são definidos de 0 a 9.br/topic/290423-esclarecimento-sobre-array/ 2/9 . ..imasters.. ele só poderá armazenar o mesmo tipo de dado pelo qual foi declarado. 20)..13/07/2017 Esclarecimento sobre Array . MeuArray[19] := 'Delphi'.. Nesse caso o array dinâmico pode ser redimensionado a todo instante. assim:   var MeuArray: array of String. se foi declarado como String. mesmo voce o redimensionado a toda hora..Delphi .. .. MeuArray[0] := 'Jorge Abreu'.. ao redimensioná-lo novamente.. os dados anteriormente atribuídos não se apagam. ou seja. quando voce o dimensiona pela primeira vez e atribuir valores aos seus índices.. é que voce pode redimencionar arrays dinâmicos..

TForm1 = class(TForm) private { Private declarations } public { Public declarations } end. ... . etc. creio eu que a solução para o seu caso não é utilizar o array puro simplesmente... assim:   var MeuRegistro: array of TMeuRegistro. MeuRegistro[I]. for I := 0 to 9 do begin MeuRegistro[I]. e acredito até que muitos usuários ainda o utilizam. ou seja.. este tipo tornou-se obsoleto por causa dos bancos de dados.. begin SetLength(MeuRegistro. . .Nome := 'Jerfs'.   Pelo teor da sua pergunta.. sempre armazenará Integer.imasters. MeuRegistro[I].. I: Integer. Paulista. Cliente_Especial: Boolean. estou certo ?   Neste caso.. https://forum. mas sim declarar um array como um tipo de dado.com.....Delphi ...13/07/2017 Esclarecimento sobre Array .. ele ainda funciona nas suas novas versões... Endereco: String. que muito embora já esteja obsoleto na linguagem Object Pascal do Delphi.ClienteEspecial := True.'.Endereco := 'Av.br/topic/290423-esclarecimento-sobre-array/ 3/9 . end.. .Fórum iMasters armazenará String e se foi declarado como Integer.... . ele inicialmente fora criado para criar tabelas (array com tipos de dados diferentes)... presumo que voce pretende criar vários arrays de diversos tipos. 10).. eu estou falando do tipo Record e ele tem que ser definido com a cláusula Type. Data_Nasc: TDate. assim:   type TMeuRegistro = Record Nome: String. Agora vai pode declarar um array dinâmico como o tipo TMeuRegistro e redimensioná-lo quantas vezes quiser..

imasters. espero que isto sirva para o que voce pretende fazer.. muito bom o que escreveu. End.. 2008 Discorpio.Delphi . simplesmente colocamos dentro de um for os delimitadores e podemos criar quantas arrays forem necessárias.Nome := 'Delphi'. então ora precisarei de 4 arrays. .. for I := 10 to 19 do begin MeuRegistro[I]. . mas em Delphi eu não tenho nem idéia de como fazer isso.br/topic/290423-esclarecimento-sobre-array/ 4/9 . ora precisarei de 200 arrays. e lá é bem fácil fazer. 20). certamente vou usar muito isso aqui valeu mesmo! Mas o que preciso no momento é: eu tenho um TXT..com. uma outra coisa.   Um abraço  0 Jerfs     1 Members 447 posts Postado Junho 6.. uma coisa que não mudará é o tipo de dados.. eu consigo referenciar ao nome da array de forma dinamica?! por exemplo:   Para me referenciar a array grupo1 e inserir um valor na posição 10 dela. sempre serão string. Programo em Action Script.13/07/2017 Esclarecimento sobre Array .Fórum iMasters end.... (levar em consideração a array já criada)   CODE var i := 1. depois de eu criar as arrays.. Begin 'grupo'+i[10] := 'teste'.. atraves desses parametros (que são váriaveis) vou saber quantas arrays vou precisar. https://forum. Bom.. nele tenho vários parametros. para alimentá-las. end. end. SetLength(MeuRegistro.

o Object Pascal do Delphi é uma das linguagens fortemente tipada.br/public/style_emoticons/default/clap. enfim.com.. 2008 Galera.imasters.   Creio que no Delphi isto não será possível. acredito que em delphi deva existir alguma forma de se fazer isso.   Um abraço. assim como também na Linguagem Java e no C. 2008 Boa tarde Jerfs. isso é possível?  0 Discorpio     1 Members 159 posts Postado Junho 6. não é em qualquer lugar dentro do código do Delphi que voce pode declarar variáveis.   Conto com a colaboração de todos.Fórum iMasters Em flash isso é possível. voce precisa declarar variáveis.com.. de forma que ele se molde com o txt de parametros.. estou pesquisando que nem um louco para saber se é possível fazer o que quero.. e cheguei a conclusão de que o que quero é 'criar váriavel em tempo de execução'. preciso torná-lo o mais dinâmico possivel. assim como os arrays. não posso setar parametros fixos para meu sistema.13/07/2017 Esclarecimento sobre Array .   Mas por que ?   Simples.http://forum..   Já dentro do Action Script e no Flash.br/topic/290423-esclarecimento-sobre-array/ 5/9 .gif  0 Jerfs     1 Members 447 posts Postado Junho 6. porque voce não pode declarar variáveis dentro da implementação do código. ou seja.  0 Discorpio     1 Members https://forum..Delphi . e esta declaração não pode ser feita dentro da implementação do código. porém dentro do Object Pascal isto não é possível. isto é possível porque voce declara classes e dentro do scopo dela voce pode declarar variáveis e já indo logo atribuindos valores.imasters.. ou seja.. primeiro antes de usá-las.

na própria dica que postei ai.   Quando voce receber o parâmetro do seu TXT. Repare que eu define o tipo record antes.   Assim oh:   type TMeuRegistro = record MeuArray: array of string.   Entretanto voce pode declarar um tipo Record e dimensioná-lo quantas vezes quiser com um outro array dentro. end.Fórum iMasters 159 posts Postado Junho 6. ou seja. então dimensione a instância Grupo que é um array de TMeuRegistro para 100. bem como declarei um array Grupo no bloco private da classe TForm1 como sendo do tipo do Record definido como TMeuRegistro. sou eu de novo.   Voce não pode criar variáveis e arrays bem como os Records também em tempo de execução.imasters.Delphi . sempre há uma solução. por exemplo 100 arrays. valendo lembrar que será os índices numerados de 0 a 99. assim:   var I: Integer. 100). o tipo Record. resta saber agora a quantidade de índices que cada array terá.   Estive pessando que na vida tudo tem jeito.   Onde encontrei uma solução para o seu caso.13/07/2017 Esclarecimento sobre Array . public { Public declarations } end. e isto voce pode também dimensionar com a função SetLength. TForm1 = class(TForm) private { Private declarations } Grupo: array of TMeuRegistro. ou seja. isto porque ambos são array dinâmicos.br/topic/290423-esclarecimento-sobre-array/ 6/9 . begin SetLength(Grupo. ora dentro de cada record não tem um array MeuArray ? Então voce terá 100 arrays. bem antes de implementá-los.com.   Agora eu posso dimensionar e redimensionar tantos o Record TMeuRegistro como o arrays MeuArray que está dentro dele. 2008 Olá Jerfs. // aqui depende da qtd de https://forum.

. 2008 Discorpio.gif  0 Jerfs     1 Members 447 posts Postado Junho 9..MeuArray. SetLength(Grupo[1].   http://forum. // ou pode definir o tamanho de cada array com índices variados: SetLength(Grupo[0].. 10).imasters... Agora voce pode atribuir bem como se referenciar a cada array desta Forma:   Grupo[9].Delphi .MeuArray[10] := 'Delphi'....... 2008 Porque dá esse erro?   [ERROR] U_Princ. Espero que isso resolva  0 Jerfs     1 Members 447 posts Postado Junho 9. eu consegui no máximo concatenar strings no campos. 20). end..   não sei não.. Deu certinho.MeuArray..13/07/2017 Esclarecimento sobre Array . mas não consegui criar https://forum.br/topic/290423-esclarecimento-sobre-array/ 7/9 . muuito obrigado! chapou mesmo. deu pra ver que você manja! parabéns!!! e denovo muito obrigado pela atenção..br/public/style_emoticons/default/clap.. mas acho que não consigo tratar cada campo (MyArray como você definiu no exemplo) como array.. eles são campos simplesmente.com.. 20)..pas(407): Incompatible types: 'Char' and 'String'   Algum item desse modo que me passou só receber Char? estou trabalhando com tudo no tipo string.com......MeuArray.Fórum iMasters arrays do parâmetro TXT // aqui voce define o tamanho de cada array com 20 índices for I := 0 to 99 do SetLength(Grupo[I]... .imasters.

br/topic/290423-esclarecimento-sobre-array/ 8/9 .   Também achei estranho porém voce precisa observar o seguinte: :o   Os tipos texto podem operar com caracteres simples ou grupos de caracteres.   Cara fiz o seguinte.13/07/2017 Esclarecimento sobre Array . muito obrigado mesmo pela disponibilidade! Espero um dia poder fazer o mesmo pelos usuários do fórum. Isso me atendeu.imasters. .Fórum iMasters indice. um vetor que pode ser limitado a 255 caracteres conforme configuração   PChar é uma string terminada em nulo (#0).  0 Discorpio     1 Members 159 posts Postado Junho 9. 2008 Olá Discorpio. um dia eu chego lá! rs   Abraço https://forum... então eu crio a tal "matriz" dentro do memo.   O Tipo Char é um único caractere ASCII   String é um texto alocado dinamicamente. 2008 Boa tarde Jerfs.. e depois então que a matriz estiver pronta eu gravo em arquivo (esse seria o porque criar as tais matrizes dinâmicas). :mellow:   Um abraço. O tipo texto padrão é o tipo string. usei um memo como uma matriz temporária.)   Contudo eu precisaria ver o código que voce está tentando usar com a função SetLength. então com certeza o erro está na passagem de parâmetros na função SetLength.com. pois se esse erro acontece quando voce dimensiona o array..  0 Jerfs     1 Members 447 posts Postado Junho 11. infelizmente! estou fazendo algo errado será?! porque quando eu coloco o indice no MyArray dá esse erro que escrevi aí em cima. mas quero agradecer.Delphi . usada geralmente nas funções da API do Windows.

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