Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#28

AW: Sortieren eines Arrays of String

  Alt 11. Jul 2019, 12:14
Sortierroutine von oben etwas angepasst:
Delphi-Quellcode:

function Filler(s : String; sFillChar : Char; iLength : Integer) : String;
begin
  Result := s + Copy(DupeString(sFillChar, iLength), 1, iLength - Length(s));
end;

procedure TForm1.SortMemo;
var
        i : Integer;
        k : Integer;
        s : String;
begin
  Memo1.BeginUpdate;
  // Zuerst alles mit auf Pflichtlänge auffüllen
  for i := 0 to Memo1.Lines.Count - 1 do Memo1.Lines[i] := Filler(Memo1.Lines[i],'F',14);
  // und dann sortieren.
  for i := 0 to Memo1.Lines.Count - 1 do begin
    for k := i + 1 to Memo1.Lines.Count - 1 do begin
      if Copy(Memo1.Lines[k],5,4) < Copy(Memo1.Lines[i],5,4) then begin
        s := Memo1.Lines[i];
        Memo1.Lines[i] := Memo1.Lines[k];
        Memo1.Lines[k] := s;
      end;
    end;
  end;
  Memo1.EndUpdate;
end;
Wenn's noch flexibler sein soll, da bau ins Formular noch zwei Edits ein, z. B.: edFillChar für das Zeichen, mit dem aufgefüllt werden soll und edLineLength für die Länge, bis zu der die einzelnen Zeilen aufgefüllt werden sollen.
Delphi-Quellcode:
function Filler(s : String; sFillChar : Char; iLength : Integer) : String;
begin
  Result := s + Copy(DupeString(sFillChar, iLength), 1, iLength - Length(s));
end;

procedure TForm1.SortMemo;
var
        i : Integer;
        k : Integer;
        s : String;
        iLength : Integer;
        sFillChar : Char;
begin
  Memo1.BeginUpdate;
  iLength := StrToInt(Trim(edLineLength.Text));
  sFillChar := Copy(edFillChar.Text,1,1);
  // Zuerst alles mit auf Pflichtlänge auffüllen
  for i := 0 to Memo1.Lines.Count - 1 do Memo1.Lines[i] := Filler(Memo1.Lines[i],sFillChar,iLength);
  // und dann sortieren.
  for i := 0 to Memo1.Lines.Count - 1 do begin
    for k := i + 1 to Memo1.Lines.Count - 1 do begin
      if Copy(Memo1.Lines[k],5,4) < Copy(Memo1.Lines[i],5,4) then begin
        s := Memo1.Lines[i];
        Memo1.Lines[i] := Memo1.Lines[k];
        Memo1.Lines[k] := s;
      end;
    end;
  end;
  Memo1.EndUpdate;
end;
Falls Delphi 5 die Funktion DupeString noch nicht kennen sollte:
Delphi-Quellcode:
function DupeString(sZeichen : String; iAnzahl : Integer) : String;
var
  i : Integer;
begin
  Result := '';
  for i := 1 to iAnzahl do Result := Result + sZeichen;
end;

Geändert von Delphi.Narium (11. Jul 2019 um 13:22 Uhr) Grund: Fehler behoben (hoffentlich)
  Mit Zitat antworten Zitat