AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortieren eines Arrays of String

Ein Thema von DonPedroFo · begonnen am 8. Jul 2019 · letzter Beitrag vom 23. Jul 2019
Antwort Antwort
Seite 3 von 4     123 4      
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#21

AW: Sortieren eines Arrays of String

  Alt 10. Jul 2019, 15:24
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
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#22

AW: Sortieren eines Arrays of String

  Alt 10. Jul 2019, 15:38
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
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#23

AW: Sortieren eines Arrays of String

  Alt 10. Jul 2019, 16:01
DonPedroFo könnte - falls Delphi 5 diese Funktion schon kennt - auch direkt die Funktion PadRight(TotalWidth: Integer; PaddingChar: Char): string; verwenden. In XE5 ist sie zu finden in der Unit System.SysUtils.
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (10. Jul 2019 um 16:19 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#24

AW: Sortieren eines Arrays of String

  Alt 10. Jul 2019, 16:14
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;
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (10. Jul 2019 um 16:16 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#25

AW: Sortieren eines Arrays of String

  Alt 10. Jul 2019, 18:39
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;
  Mit Zitat antworten Zitat
DonPedroFo

Registriert seit: 26. Jun 2019
18 Beiträge
 
#26

AW: Sortieren eines Arrays of String

  Alt 11. Jul 2019, 09:04
Wahnsinn es Funktioniert auf anhieb.

Vielen Dank. Sowas nenn ich mal nützliche Hilfe.
  Mit Zitat antworten Zitat
DonPedroFo

Registriert seit: 26. Jun 2019
18 Beiträge
 
#27

AW: Sortieren eines Arrays of String

  Alt 11. Jul 2019, 12:38
@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
  Mit Zitat antworten Zitat
Delphi.Narium

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

AW: Sortieren eines Arrays of String

  Alt 11. Jul 2019, 13: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 14:22 Uhr) Grund: Fehler behoben (hoffentlich)
  Mit Zitat antworten Zitat
DonPedroFo

Registriert seit: 26. Jun 2019
18 Beiträge
 
#29

AW: Sortieren eines Arrays of String

  Alt 11. Jul 2019, 14:02
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));
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#30

AW: Sortieren eines Arrays of String

  Alt 11. Jul 2019, 14:23
Da fehlt 'ne 1,

Hab's oben ergänzt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      

 

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 12:35 Uhr.
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