Fórum Comparar 2 stringlist #270760

03/03/2005

0

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


Sanses

Sanses

Responder

Post mais votado

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:

for Ind := 0 to PrimeiroStringList.Count -1 do
begin
  if SegundoStringList.IndexOf(PrimeiroStringList[Ind]) > -1 then
    SegundoStringList.Delete(SegundoStringList.IndexOf(PrimeiroStringList[Ind]));
end;



Isabelct

Isabelct
Responder

Gostei + 1

Mais Posts

03/03/2005

Sanses

utilizando sua função dá erro de list.index of bounds (-1).


Responder

Gostei + 0

04/03/2005

Isabelct

Em que ponto dá erro? Eu testei aqui e funcionou sem problemas. Se preferir, poste um trecho do seu programa.


Responder

Gostei + 0

08/06/2017

Humberto Lazo

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

Gostei + 0

13/06/2017

Wesley Yamazack

Opa Sanses, não sei se entendi.. mas eu fiz aqui um exemplo, veja se isso te atende.

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
Responder

Gostei + 1

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar