![]() |
Re: Dubikate in TStringGrid anzeigen (den Rest rausschmeißen
Zitat:
auch beim ersten Durschlauf war das Ergebniss falsch im Sinne der Anforderung ;-) |
Re: Dubikate in TStringGrid anzeigen (den Rest rausschmeißen
@marabu: Auch wenn's völlig unwichtig ist: Ich bleib dabei, man 'kann', muss aber nicht;
Sei j0 der kleinste Index mit sl[j0] = KEY zu irgendeinem KEY und j1 der größte Index. Ziel ist es, j0 zu finden. Ob ich bei j1 anfange (so wie ich mit meiner Änderung) oder bei einem beliebigen j (j0<=j<=j1), so wie Du mit dem IndexOf, ist unerheblich. Allerdings ist meine Version schneller, insofern kann man müssen, muss aber nicht. :wiejetzt: Ach, was ist das für ein Sonntag, an dem man sich über SOWAS auseinandersetzen kann. Dann geht's uns wohl doch ganz gut :zwinker: |
Re: Dubikate in TStringGrid anzeigen (den Rest rausschmeißen
@yankee: sorry, dein thread ist etwas entartet und ich bin wahrscheinlich der Schuldige. Hier der Code, der dein Problem lösen könnte. Er setzt die Idee von keldorn um, ohne den IndexOf()-Fehler. Hoffentlich korrekt:
Delphi-Quellcode:
@keldorn: Bin auch drauf hereingefallen - dabei habe ich sogar älteren Code bei mir gefunden, der die Falle umgeht.
procedure TDemoForm.DeleteRow(iRow: integer);
var i: integer; begin with StringGrid do begin if iRow < FixedRows then raise Exception.Create('you cannot delete a fixed row'); for i := Succ(iRow) to RowCount - 1 do Rows[i-1].Assign(Rows[i]); RowCount := RowCount - 1; end; end; procedure TDemoForm.KillButtonClick(Sender: TObject); var i, iDup, iCol, iDist: integer; allDuplicates: boolean; begin iCol := 1; // column to check allDuplicates := false; with StringGrid do for i := RowCount - 1 downto 0 do begin iDup := i; while (iDup > 0) and (cells[iCol, iDup - 1] = cells[iCol, iDup]) do Dec(iDup); iDist := i - iDup; if (iDist = 0) or (not allDuplicates and (iDist > 1)) then DeleteRow(i); end; end; @sharky: Bist ein guter Tester. Selbst die ersten 3000 mit dem gezeigten Random-Code erzeugten Testfälle werden von meiner ersten / fehlerhaften Prozedur korrekt verarbeitet. Da musstest erst du kommen mit deinen wahrscheinlich handgeschmiedeten Testdaten. @alzaimar: Hast heute als einziger so richtig den Überblick gehabt - kein Wunder, warst ja auch lange genug im Urlaub. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz