duvida sobre deletar parte de um array

20/05/2008

1

Boa tarde,

Gostaria de saber como posso fazer para apagar um item de um array e deixar meu array depois de apagado ordenado corretamente sem espaços vazios no meio e sim no final.

obrigado


Responder

Posts

20/05/2008

Rjun

O que você guarda nesse array? Já pensou em usar lista?


Responder

20/05/2008

Muri

No array uma serie de coisas por exemplo.
strNomecompleto: string[60];
strEndereco: string[50];
strIdade: string [3];
strDatadeNascimento : TDateTime; //string[8];
strSexo: string[9];
strCidade: string[40];
strTelefone: string[16];
strSituacao: string[255];
strReceituario: string[255];
strDataAtual: TDateTime;
strAtendidoPor: string[30];
Isso ai é que esta indo emcada posição do array.
Então eu preciso apagar um array que contem todas essas informações, mas no momento em que apagar essa posição tenho que fazer a posição vazia ir para o final e ainda nã sei como posso fazer isso.


Responder

20/05/2008

Joaoshi

Colega, se não existir nada mais elegante, o jeito é criar uma função que traga os dados para a posição ´excluída´ e assim até a última posição.
Apagou o 2 -> pega o que esta no 3 e passa para 2.

Espero ter ajudado.


Responder

21/05/2008

Rjun

Ainda insisto que teria uma solução muito mais elegante se utilizasse uma lista de objetos.


Responder

21/05/2008

Javapaulomg

Ainda insisto que teria uma solução muito mais elegante se utilizasse uma lista de objetos.


Concordo contigo, a solução mais adequada seria uma lista de objetos, que por sua vez teria objetos que contém esses atributos acima citados.

Outra solução não tão interessante do ponto de vista de uma boa pratica seria um array de array.


Responder

21/05/2008

Martins

Eu tb acho que usando StringList vc poderá obter o resultado esperado, acho q é a forma mais elegante e de melhor manutenção.


Responder

21/05/2008

Rjun

Acho que TStringList não resolve. Um TObjectList seria o mais indicado.


Responder

21/05/2008

Muri

Valeu pelas dicas pessoal.

To tentando fazer pelo modo de uim array de um array, anteriormente estava ordenando em ordem alfabetica fa que não estou trabalhando com banco de dados entãop agora ficou mais dificil.

Vlw


Responder

21/05/2008

Muri

Ola pessoal consegui um jeito e funcionou bem..

Fiz um for que vai subescrever a posição ao invez de deletar.


Obrigado pelas dicas!


Responder

24/05/2008

Marco Salles

Se voce estava com dificuldade de Fazer com TstringList ou com
TObjectList , segue abaixo um exemplo bem facim que voce pode
estudar e adaptar as sua necessidades ...

__definição da classe
...... 
 TPessoa = Class
   endereco:string;
   cidade:string;
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}


//definidino Uma Lista de Objetos
var
 ColecaoDePessoas:TstringList;
 umaPessoa:Tpessoa;


//No onShow Cria a Lista e Atribui Sortede:=True -->> [b:954dc77759]Sua Lista estar //sempre Ordenada sem nenhum esforço[/b:954dc77759]
[b:954dc77759]procedure TForm1.FormShow(Sender: TObject);
begin
ColecaoDePessoas:=TstringList.Create;
ColecaoDePessoas.Sorted:=true;
end;[/b:954dc77759]

//Adicinar um Objeto Pessoa a Sua Lista
procedure TForm1.EntradaDeDadosClick(Sender: TObject);
begin
umaPessoa:=TPessoa.Create;
umaPessoa.endereco:=edtEndereco.Text;
umaPessoa.Cidade:=edtCidade.Text;
ColecaoDePessoas.AddObject(edtNome.Text,umaPessoa);
end;


/)Deletar uma Pessoa da Lista
procedure TForm1.DeletarItemsClick(Sender: TObject);
var
localizar:integer;
begin
Localizar:=ColecaoDePessoas.IndexOf(edtNome.Text);
if Localizar > -1 Then
  begin
    ColecaoDePessoas.Delete(Localizar);
  end;
end;


//Exibir Dados das Pessoa nun Memo por Exempllo
procedure TForm1.ExibirDadosClick(Sender: TObject);
var
i:integer;
begin
 for i:=0 To ColecaoDePessoas.Count-1 do
   begin
     memo1.Lines.Add(ColecaoDePessoas.Strings[i]);
     memo1.Lines.Add(TPessoa(ColecaoDePessoas.Objects[i]).endereco);
     memo1.Lines.Add(TPessoa(ColecaoDePessoas.Objects[i]).cidade);
     memo1.Lines.Add(´´);
   end;
end;


//No OnClose destruir os Objetos e a Lista dos Objetos
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:integer;
begin
 For i:=0 To ColecaoDePessoas.Count-1 do
   TPessoa(ColecaoDePessoas.Objects[i]).free;
 Freeandnil(ColecaoDePessoas);
end;


consideraçõs Finais ...
Sua Lista esta Ordenada por [b:954dc77759]Nomes[/b:954dc77759] ... Se voce quiser ou necessitar de Ordenação por [b:954dc77759]Cidades , Endereços [/b:954dc77759]enfims , ai voce deve usar [b:954dc77759]CallBack , juntamente com ListS.hort [/b:954dc77759]... Tem neste mesmo site um exemplo meu , deve ter de outros tb , de como ordenar uma Lista De Objetos pelos iversos Atributos que compoem a Lista


Responder

27/05/2008

Brunodsr

Minha sugestão é optar pelo mais simples. No caso, ou com uma lista (já implementada no delphi TList, TStrings, TStringList) ou com uma árvore binária.

Eu faria com o TStringList. É mais simples. Tipo:
Criaria uma classe com cada array desse dai sendo um atributo e depois inseria na lista, colocando o campo chave como id. Daí era só posicionar pelo ID e mandar excluir. O resto ele faz só. Facil ne.

Um abraço,

Bruno Rocha


Responder

27/05/2008

Muri

Valeu pela ideia, mas acabei fazendo de outro outra forma mais facil um pouco, sobscrevendo o dado que iria ser excluido. A duvida agora é simples, quero colocar um relogio na tela do meu form, para que na hora em que estiver executando o programa ele fique contando HH:MM:SS e que isso seja visível, se poder me ajudar fico grato.

Abraço!


Responder

27/05/2008

Martins

Valeu pela ideia, mas acabei fazendo de outro outra forma mais facil um pouco, sobscrevendo o dado que iria ser excluido. A duvida agora é simples, quero colocar um relogio na tela do meu form, para que na hora em que estiver executando o programa ele fique contando HH:MM:SS e que isso seja visível, se poder me ajudar fico grato. Abraço!


Coloca um Label no teu form e um TTimer tb.

Clique duas vezes no TTimer do seu form e digite o código abaixo:

Labelx.Cpation := TimeToStr(Now);


Espero q seja isso q vc está querendo.


Responder

27/05/2008

Martins

[quote:43579d3303=´muri´]Valeu pela ideia, mas acabei fazendo de outro outra forma mais facil um pouco, sobscrevendo o dado que iria ser excluido. A duvida agora é simples, quero colocar um relogio na tela do meu form, para que na hora em que estiver executando o programa ele fique contando HH:MM:SS e que isso seja visível, se poder me ajudar fico grato. Abraço!


Coloca um Label no teu form e um TTimer tb.

Clique duas vezes no TTimer do seu form e digite o código abaixo:

Labelx.Caption := TimeToStr(Now);


Espero q seja isso q vc está querendo.[/quote:43579d3303]

Labelx.Caption := TimeToStr(Now);



Responder

27/05/2008

Muri

[quote:86edbc3692=´Martins´][quote:86edbc3692=´muri´]Valeu pela ideia, mas acabei fazendo de outro outra forma mais facil um pouco, sobscrevendo o dado que iria ser excluido. A duvida agora é simples, quero colocar um relogio na tela do meu form, para que na hora em que estiver executando o programa ele fique contando HH:MM:SS e que isso seja visível, se poder me ajudar fico grato. Abraço!


Coloca um Label no teu form e um TTimer tb.

Clique duas vezes no TTimer do seu form e digite o código abaixo:

Labelx.Caption := TimeToStr(Now);


Espero q seja isso q vc está querendo.[/quote:86edbc3692]

Labelx.Caption := TimeToStr(Now);
[/quote:86edbc3692]



VALEU MARTINS...!!

MUITO FÁCIL DE FAZER!!!! ABRAÇO..


Responder