Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 20.06.05 17:38 
Hallo!
Habe mal wieder eine Frage an euch:
Wie kann man eine TStringList nach Wochentagen sortieren, also Montag, Dienstag, usw.? Die Wochentage können in der StringList völlig durcheinander enthalten sein, etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
Mittwoch
Samstag
Dienstag

das soll nun geordnet werden:
ausblenden Delphi-Quelltext
1:
2:
3:
Dienstag
Mittwoch
Samstag

Es können ein oder mehrere, auch alle, Wochentage enthalten sein. Wie könnte ein solches Sortierverfahren aussehen?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mo 20.06.05 17:52 
Mir fällt eine indirekte Lösung ein: Wochentag in Zahl umwandeln, sortieren, rückwandeln ;)

AXMD
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 20.06.05 18:04 
TStringList hat eine Methode CustomSort. Damit musst du dich beschäftigen. Die Suche im Forum könnte auch helfen.
Phantom1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: Mo 20.06.05 18:59 
versuch es mal so hier:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
function SortDays(List: TStringList; Index1, Index2: Integer): Integer;
Const
  DayOfTheWeek: array[0..6] of String = ('montag', 'dienstag', 'mittwoch',
                                         'donnerstag', 'freitag', 'samstag', 'sonntag');

  function GetWeekDay(Day: String): Byte;
  begin
    for Result:=0 to 6 do
      if DayOfTheWeek[Result]=LowerCase(Day) then
        Break;
  end;

var i1, i2: Byte;
begin
  i1:=GetWeekDay(List[Index1]);
  i2:=GetWeekDay(List[Index2]);
  if i1<i2 then
    Result:=-1
  else
    if i2<i1 then
      Result:=1
    else
      Result:=0;
end;

Aufruf so:
ausblenden Delphi-Quelltext
1:
stringlist.CustomSort(@SortDays);					

mfg
Phantom1
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 20.06.05 20:35 
Vielen Dank, das funktioniert perfekt!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!