Comparar 2 stringlist
Olá amigos
Em determinado momento, meu sistema cria um stringlist com vários itens. Mais adiante é criado um segundo stringlist. O que preciso é depois de ter criado o segundo stringlist, comparar o segundo com o primeiro e excluir do segundo, todos os itens que estajam presentes nos 2 stringlist´s.
Obrigado pela atenção
Sanses
Em determinado momento, meu sistema cria um stringlist com vários itens. Mais adiante é criado um segundo stringlist. O que preciso é depois de ter criado o segundo stringlist, comparar o segundo com o primeiro e excluir do segundo, todos os itens que estajam presentes nos 2 stringlist´s.
Obrigado pela atenção
Sanses
Sanses
Curtidas 0
Melhor post
Isabelct
03/03/2005
Você precisará percorrer todo o primeiro StringList, e verificar item por item se ele está no segundo StringList.
Segue um esboço do código:
Segue um esboço do código:
for Ind := 0 to PrimeiroStringList.Count -1 do begin if SegundoStringList.IndexOf(PrimeiroStringList[Ind]) > -1 then SegundoStringList.Delete(SegundoStringList.IndexOf(PrimeiroStringList[Ind])); end;
GOSTEI 1
Mais Respostas
Sanses
03/03/2005
utilizando sua função dá erro de list.index of bounds (-1).
GOSTEI 0
Isabelct
03/03/2005
Em que ponto dá erro? Eu testei aqui e funcionou sem problemas. Se preferir, poste um trecho do seu programa.
GOSTEI 0
Humberto Lazo
03/03/2005
Da erro pois
1.- Deletando um item do stringlist o valor Count muda
2.- Os item sofre um reindexação que não corresponde à indexação anterior.
1.- Deletando um item do stringlist o valor Count muda
2.- Os item sofre um reindexação que não corresponde à indexação anterior.
GOSTEI 0
Wesley Yamazack
03/03/2005
Opa Sanses, não sei se entendi.. mas eu fiz aqui um exemplo, veja se isso te atende.
Listagem 1: Estrutura do projeto.
Listagem 2: instanciamos as 2 listas, depois preenchemos cada uma delas com valores aleatórios (repetidos ou não) e por fim adicionamos o conteúdo em um memo, apenas para facilitar a visualização.
Listagem 3: Clique do Botão.
Onde acontece a logica da ideia. Estamos pegando o conteúdo da lista_b e jogando para a lista_a, desde que esse item não exista na lista_a, e no final limpamos a lista_b.
Veja se isso irá te ajudar. Vlw.. grande abraço
Listagem 1: Estrutura do projeto.
.....
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
Lista_a, Lista_b: TStringList;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Listagem 2: instanciamos as 2 listas, depois preenchemos cada uma delas com valores aleatórios (repetidos ou não) e por fim adicionamos o conteúdo em um memo, apenas para facilitar a visualização.
procedure TForm1.FormCreate(Sender: TObject);
begin
Lista_a := TStringList.Create;
Lista_b := TStringList.Create;
//preenchendo lista A
Lista_a.Add('Flamengo');
Lista_a.Add('Botafogo');
Lista_a.Add('Internacional');
Lista_a.Add('São Paulo');
Lista_a.Add('Bahia');
Lista_a.Add('Cruzeiro');
//preenchendo lista B
Lista_b.Add('Flamengo');
Lista_b.Add('Vasco');
Lista_b.Add('Cruzeiro');
Lista_b.Add('Bahia');
Memo1.Lines := Lista_a;
Memo2.Lines := Lista_b;
end;
Listagem 3: Clique do Botão.
Onde acontece a logica da ideia. Estamos pegando o conteúdo da lista_b e jogando para a lista_a, desde que esse item não exista na lista_a, e no final limpamos a lista_b.
procedure TForm1.Button1Click(Sender: TObject);
var
strItem: string;
begin
for strItem in Lista_b do
begin
if not Lista_a.IndexOf(strItem) > -1 then
Lista_a.Add(strItem);
end;
Lista_b.Clear;
Memo3.Lines := Lista_a;
end;
Veja se isso irá te ajudar. Vlw.. grande abraço
GOSTEI 1