begin process at 2008 08 29 20:26:57
1 233 870 membres
392 nouveaux aujourd'hui
14 294 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : detection d'un doublon de lignes et le supprimer [ Algorithme / Compression, Split et Cryptage ] (Napster)

detection d'un doublon de lignes et le supprimer le 19/04/2007 22:25:04

Napster
salut tout le monde  ,
j'ai créer un petit editeurExtraire un fichie dans Listbox , mais dans le fichier ya des doublons de ligne , comment faire pour laisser qune ligne et  supprimer ces doublons .
 merci d'avance 

Re : detection d'un doublon de lignes et le supprimer le 20/04/2007 09:06:38

Loda
Membre Club
salut,

tstringlist a une gestion de doublon si t alist est triée. lit l'aide.

sinon:
- parcourt la liste original
- si déjà present dans list copy, efface la l'item
- sinon ajouter le item dans list copy (list triée)

bon code,

Loda

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.

Re : detection d'un doublon de lignes et le supprimer le 20/04/2007 18:25:46

DRJEROME

Salut la compagnie ;)

un exemple :


var
M:TStringlist;

begin
    M:=TStringlist.Create;
    M.Sorted:=true;
    M.Duplicates:=dupIgnore;
    M.Text:=Listbox1.Items.Text;
    Listbox1.Items.Text:=M.Text;
    M.Free;
end;




DrJerome

Re : detection d'un doublon de lignes et le supprimer le 20/04/2007 18:41:21

f0xi
Membre Club
(Admin CS)

tite correction :

var
  TSL : TStringList;
begin
  TSL := TStringList.Create;
  try
    TSL.Sorted     := true;
    TSL.Duplicates := dupIgnore;
    TSL.Assign(ListBox1.Items);
    ListBox1.Items.Assign(TSL);
  finally
    TSL.Free;
  end;
end;




Croc (click me)

Re : detection d'un doublon de lignes et le supprimer le 20/04/2007 19:13:35

DRJEROME
"Assign" corespond à une méthode AddStrings(TStrings(Source))  // je résume car c'est plus compliqué

ça marche aussi mais le principe est le même

c'est surtout "Duplicates" l'essentiel du code après on peut broder des optimisations voire de l'ASM pour ceux qui aiment l'asm

DrJerome

Re : detection d'un doublon de lignes et le supprimer le 20/04/2007 19:26:31

f0xi
Membre Club
(Admin CS)

oui, il est certains qu'assign est moins simple que Text := Text ... mais, c'est la meilleure methode pour assigner le contenus d'un TStrings a un autre TStrings.
tout comme pour assigner le contenus d'un TPersistent a un autre TPersistent, c'est la methode la plus propre et la plus respectueuse.

donc autant, montrer, le bon exemple, même si il fait partis d'une multitude de solutions possibles, l'avantage d'assign c'est qu'elle s'adapte trés bien a toute forme de liste, contrairement a ta solution ou on perd certaines informations quand on utilise une liste particuliere, notement les listes delimitées et donc le duplicate ne pourrait pas fonctionner forcement.
de plus elle contient deja tout le code necessaire qu'on devrait normalement mettre en place lors des modifications de liste (beginupdate, endupdate, clear, etc)

procedure TStrings.Assign(Source: TPersistent);
begin
  if Source is TStrings then
  begin
    BeginUpdate;
    try
      Clear;
      FDefined := TStrings(Source).FDefined;
      FNameValueSeparator := TStrings(Source).FNameValueSeparator;
      FQuoteChar := TStrings(Source).FQuoteChar;
      FDelimiter := TStrings(Source).FDelimiter;
      AddStrings(TStrings(Source));
    finally
      EndUpdate;
    end;
    Exit;
  end;
  inherited Assign(Source);
end;



Croc (click me)

Re : detection d'un doublon de lignes et le supprimer le 20/04/2007 19:34:04

DRJEROME
c'est bien ce que je disais on brode sur ma soluce, le "duplicate" est l'essentiel

je répondais juste à une question je ne cherchais pas une solution générale à tous les problèmes non énoncés rajoutant des méthodes

Allez bravo si tu veux... moi je pars au restau ;)

DrJerome

Re : detection d'un doublon de lignes et le supprimer le 20/04/2007 19:39:23

DRJEROME
sinon ton assign plus court :

procedure TStrings.Assign(Source: TPersistent);
begin
  if Source is TStrings then
  begin
    BeginUpdate;
    try
      Clear;
      AddStrings(TStrings(Source));
    finally
      EndUpdate;
    end;
    Exit;
  end;
  inherited Assign(Source);
end;


DrJerome

Re : detection d'un doublon de lignes et le supprimer le 20/04/2007 20:47:06

f0xi
Membre Club
(Admin CS)

non non non, tu me modifie pas le code de la VCL comme ça mon ami !
que vas dire borland si tu commence a modifier leur code !?


Croc (click me)

Re : detection d'un doublon de lignes et le supprimer le 20/04/2007 22:40:59

DRJEROME
on n'a pas besoin des "separators" pour le cas présent (et selon les versions delphi le code n'est pas le même les separators ne sont pas sur toutes les versions)

DrJerome


Classé sous : lignes, supprimer, detection, doublon, doublons

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS