Delphi-PRAXiS
Seite 3 von 4     123 4   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Sortieren eines Arrays of String (https://www.delphipraxis.net/201283-sortieren-eines-arrays-string.html)

Andreas13 10. Jul 2019 15:24

AW: Sortieren eines Arrays of String
 
Zitat:

Zitat von DeddyH (Beitrag 1436428)
In Delphi 5 war die IIRC in SysUtils, wenn es sie überhaupt schon gab.

In diesem Fall hast Du hier eine selbstgestrickte, nicht so optimierte Lösung:
Delphi-Quellcode:
Function MyStringOfChar(Ch: Char; Count: Integer): String;
Var
  i: Integer;
  S: String;
   
Begin
  S:= '';
  For i:= 1 To Count Do
    S:= S + Ch;

  Result:= S;
End;
Gruß, Andreas

Dalai 10. Jul 2019 15:38

AW: Sortieren eines Arrays of String
 
StringOfChar gibt es in Delphi 5, offensichtlich integriert im Compiler (die Hilfe sagt Unit System, die Funktion ist dort aber nicht zu finden).

Grüße
Dalai

Andreas13 10. Jul 2019 16:01

AW: Sortieren eines Arrays of String
 
DonPedroFo könnte - falls Delphi 5 diese Funktion schon kennt - auch direkt die Funktion
Delphi-Quellcode:
PadRight(TotalWidth: Integer; PaddingChar: Char): string;
verwenden. In XE5 ist sie zu finden in der Unit System.SysUtils.
Gruß, Andreas

Andreas13 10. Jul 2019 16:14

AW: Sortieren eines Arrays of String
 
Vermutlich gibt es die Funktion PadRight(..) in Delphi 5 noch nicht. DonPedroFo könnte jedoch wie folgt vorgehen:
Delphi-Quellcode:
function MyPadRight(Str_kurz: String; Ch: Char; Len_Soll: Integer): String;
var
  n_Ch: Integer;
 
begin
  Result:= Str_kurz;
  n_Ch:= Len_Soll - Length(Str_kurz);
  If n_Ch < 1 Then
    Exit;
   
  Result:= Str_kurz + StringOfChar(Ch, n_Ch); // oder MyStringOfChar(..) von oben
end;

Delphi.Narium 10. Jul 2019 18:39

AW: Sortieren eines Arrays of String
 
Sortierroutine von oben etwas angepasst:
Delphi-Quellcode:
const
  csFFFF = 'FFFFFFFFFFFFFF'; // Soviele F, wie maximal benötigt werden könnten.
  ciFFFF = 14; // Maximale Anzahl von F, die benötigt werden kann.

function FillFFFF(s : String) : String;
begin
  Result := s + Copy(csFFFF,1,ciFFFF - Length(s));
end;

procedure TForm1.SortMemo;
var
        i : Integer;
        k : Integer;
        s : String;
begin
  Memo1.BeginUpdate;
  // Zuerst alles mit F auf Pflichtlänge auffüllen
  for i := 0 to Memo1.Lines.Count - 1 do Memo1.Lines[i] := FillFFFF(Memo1.Lines[i]);
  // 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;

DonPedroFo 11. Jul 2019 09:04

AW: Sortieren eines Arrays of String
 
Wahnsinn es Funktioniert auf anhieb.

Vielen Dank. Sowas nenn ich mal nützliche Hilfe.

DonPedroFo 11. Jul 2019 12:38

AW: Sortieren eines Arrays of String
 
@Delphi.Narium
Die Lösung ist schonmal perfekt.

Könnte ich, um das ganze etwas variabler zu schreiben,
die Zeilen

csFFFF = 'FFFFFFFFFFFFFF';
ciFFFF = 14;

irgendwie so schreiben

csFFFF = (Variable)'F'
ciFFFf = (Variable)

wenn als Variable z.b. 10 steht

csFFFF = 'FFFFFFFFFF' //10xF
ciFFFF = 10

Delphi.Narium 11. Jul 2019 13:14

AW: Sortieren eines Arrays of String
 
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;

DonPedroFo 11. Jul 2019 14:02

AW: Sortieren eines Arrays of String
 
Jetzt bekomme ich "Nicht genügend wrikliche Parameter" an dieser Stelle

Musste die Function DubString noch erstellen da sie Delphi 5 anscheinend nicht hat

Result := s + Copy(DupeString(sFillChar, iLength), iLength - Length(s));

Delphi.Narium 11. Jul 2019 14:23

AW: Sortieren eines Arrays of String
 
Da fehlt 'ne 1,

Hab's oben ergänzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.
Seite 3 von 4     123 4   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz