AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Strings zusammenführen und Bereinigen
Thema durchsuchen
Ansicht
Themen-Optionen

Strings zusammenführen und Bereinigen

Ein Thema von creehawk · begonnen am 8. Mai 2023 · letzter Beitrag vom 12. Mai 2023
 
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#9

AW: Strings zusammenführen und Bereinigen

  Alt 8. Mai 2023, 11:13
Ich hätte auch noch eine Alternative basierend auf einer gepimpten TStringList, die im Wesentlichen auf dem bisher gesagten aufbaut:
Delphi-Quellcode:
type
  TNumberStringList = class(TStringList)
  protected
    function CompareStrings(const S1: string; const S2: string): Integer; override;
  public
    constructor Create;
    procedure AddNumbers(const ACommaText: string);
  end;

constructor TNumberStringList.Create;
begin
  inherited Create(dupIgnore, True, True);
end;

procedure TNumberStringList.AddNumbers(const ACommaText: string);
begin
  AddStrings(ACommaText.Split([',']));
end;

function TNumberStringList.CompareStrings(const S1, S2: string): Integer;
begin
  Result := string.Compare(S1, S2, [TCompareOption.coDigitAsNumbers]);
end;

procedure TestNumberStringList;
var
  String1: string;
  String2: string;
  String3: string;
begin
  String1 := '1,2,4,6,9';
  String2 := '1,3,6,9,10,11';
  String3 := '2,3,4,9,10';
  var lst := TNumberStringList.Create;
  try
    lst.AddNumbers(String1);
    lst.AddNumbers(String2);
    lst.AddNumbers(String3);
    var S := lst.CommaText;
    Assert(S = '1,2,3,4,6,9,10,11');
  finally
    lst.Free;
  end;
end;
Zur Erklärung:
  • Mit dem dupIgnore, True im Create werden erst gar eine Doubletten hinzugefügt (das zweite True für CaseSensitive ist hier redundant)
  • Das coDigitAsNumbers im CompareStrings sorgt für eine korrekte Sortierung der Zahlen
  • Das AddNumbers vereinfacht das Hinzufügen der einzelnen Listen

Der obige Ansatz funktioniert auch wenn nicht nur Zahlen vorkommen. In dem Fall wäre der CaseSensitive Parameter im Create aber vielleicht doch relevant.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 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