duvida sobre deletar parte de um array

Delphi

20/05/2008

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


Muri

Muri

Curtidas 0

Respostas

Rjun

Rjun

20/05/2008

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


GOSTEI 0
Muri

Muri

20/05/2008

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.


GOSTEI 0
Joaoshi

Joaoshi

20/05/2008

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.


GOSTEI 0
Rjun

Rjun

20/05/2008

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


GOSTEI 0
Javapaulomg

Javapaulomg

20/05/2008

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.


GOSTEI 0
Martins

Martins

20/05/2008

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


GOSTEI 0
Rjun

Rjun

20/05/2008

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


GOSTEI 0
Muri

Muri

20/05/2008

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


GOSTEI 0
Muri

Muri

20/05/2008

Ola pessoal consegui um jeito e funcionou bem..

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


Obrigado pelas dicas!


GOSTEI 0
Marco Salles

Marco Salles

20/05/2008

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


GOSTEI 0
Brunodsr

Brunodsr

20/05/2008

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


GOSTEI 0
Muri

Muri

20/05/2008

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!


GOSTEI 0
Martins

Martins

20/05/2008

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.


GOSTEI 0
Martins

Martins

20/05/2008

[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);



GOSTEI 0
Muri

Muri

20/05/2008

[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..


GOSTEI 0
Martins

Martins

20/05/2008

[quote:7b04f66862=´Martins´][quote:7b04f66862=´Martins´][quote:7b04f66862=´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:7b04f66862]

Labelx.Caption := TimeToStr(Now);
[/quote:7b04f66862]



VALEU MARTINS...!!

MUITO FÁCIL DE FAZER!!!! ABRAÇO..[/quote:7b04f66862]

Disponha amigo, estamos aqui para nos ajudar.

Boa sorte e bons códigos.


GOSTEI 0
Muri

Muri

20/05/2008

Boa tarde Pessoal,

Fiz um programa com 2 forms e no segundo tenho um memo e quero imprimir o conteudo deste memo em uma folha A4, será que alguém pode me ajudar.

Obrigado


GOSTEI 0
POSTAR