Domino 9 und frühere Versionen > ND8: Entwicklung

Serialisierte Liste nach Datum sortieren

<< < (7/7)

horus:
hallo

hab beim durchlesen deines problems mit den vielen transforms und so irgendwann den durchblick verloren.

nochmal kurz für mich zusammengefasst:
du hast eine liste die du nach dem darin enthaltenen datum und uhrzeit sortieren willst, du willst formelprache verwenden, das ganze soll einfach und kurz sein.

also dann vergiss mal die transforms und versuch das hier

sorted := @Sort(liste; [CustomSort];@If(@TextToTime(@Middle($A;"StartDate~"; "|") + " " + @Middle($A;"StartTime~"; "|")) < @TextToTime(@Middle($B;"StartDate~"; "|") + " " + @Middle($B;"StartTime~"; "|"));-1;@TextToTime(@Middle($A;"StartDate~"; "|") + " " + @Middle($A;"StartTime~"; "|")) > @TextToTime(@Middle($B;"StartDate~"; "|") + " " + @Middle($B;"StartTime~"; "|"));1;0));

-> wobei 'liste' natürlich deine liste ist.
-> derzeit berücksichtige ich darin nur das startdatum und die startzeit
-> sortierreihenfolge (auf- absteigend) einfach durch ändern der vorzeichen bei den true argumenten der einzelnen bedingungen ändern -> 1 > -1 und umgekehrt.

hoffe ich hab dein problem richte verstanden

michael

Thomas Schulte:
OK mein @Sorted hatte ursprünglich das Problem, das er aus dem TextToTime nicht wirklich schlau wurde. Deswegen habe ich den zunächst noch zusätzlich in seine Datumsbestandteile zerlegt.

Mit der Lösung von Michael geht das dann mit einem schönen kleinen @sort und sorry das ich das sagen muss Michael   ;D einem @transform.

Quellliste ....

|#||Route~Paderborn - Lippstadt Paderborn|StartDate~25.02.2006|StartTime~08:00:00|EndTime~15:00:00|

|#||Route~Kulmbach - Hannover- Kulmbach|StartDate~10.02.2006|StartTime~06:15:00|EndTime~12:00:00|

|#||Route~Paderborn - Hannover- Paderborn|StartDate~10.02.2006|StartTime~06:15:00|EndTime~00:00:00|

|#||Route~Aachen - Hannover- Aachen|StartDate~10.02.2006|StartTime~06:15:00|EndTime~14:00:00|

|#||Route~Paderborn - Hannover- Paderborn|StartDate~21.02.2006|StartTime~00:00:00|EndTime~21:00:00|

|#||Route~Paderborn - Hannover- Paderborn|StartDate~13.02.2006|StartTime~06:00:00|EndTime~00:00:00|

|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|

|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|

Code hinter Button ...

--- Code: ---REM {Delimiter und interne Variablen setzen};
_dLim1 := "|";
_dlim2 := "~";
i :=0;

REM {Sortieren};
_sortedList := @Sort(SourceField; [CustomSort];@If(
@TextToTime(@Middle($A;"StartDate" + dLim2; dLim1) + " " + @Middle($A;"StartTime" + dLim2; dLim1)) <
@TextToTime(@Middle($B;"StartDate" + dLim2; dLim1) + " " + @Middle($B;"StartTime" + dLim2; dLim1));-1;
@TextToTime(@Middle($A;"StartDate" + dLim2; dLim1) + " " + @Middle($A;"StartTime" + dLim2; dLim1)) >
@TextToTime(@Middle($B;"StartDate" + dLim2; dLim1) + " " + @Middle($B;"StartTime" + dLim2; dLim1));1;
0));

REM {neu nummerieren};
FIELD TargetField := @Transform(_sortedList;"var";@Text(i:=i+1) + var);
@True

--- Ende Code ---

Ergebnisliste ...

1|#||Route~Paderborn - Hannover- Paderborn|StartDate~21.02.2006|StartTime~00:00:00|EndTime~21:00:00|

2|#||Route~Paderborn - Lippstadt Paderborn|StartDate~25.02.2006|StartTime~08:00:00|EndTime~15:00:00|

3|#||Route~Paderborn - Hannover- Paderborn|StartDate~13.02.2006|StartTime~06:00:00|EndTime~00:00:00|

4|#||Route~Paderborn - Hannover- Paderborn|StartDate~10.02.2006|StartTime~06:15:00|EndTime~00:00:00|

5|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|

6|#||Route~Kulmbach - Hannover- Kulmbach|StartDate~10.02.2006|StartTime~06:15:00|EndTime~12:00:00|

7|#||Route~Paderborn - Hannover- Paderborn|StartDate~24.02.2006|StartTime~00:00:00|EndTime~21:00:00|

8|#||Route~Aachen - Hannover- Aachen|StartDate~10.02.2006|StartTime~06:15:00|EndTime~14:00:00|

horus:
OK,OK

da geb ich mich doch geschlagen!! für die nummerierung obwohl das würde man auch ohne transform ... aber haarspaltereien!! naja zumindest ist das transform jetzt lesbar und übersichtlich und ohne liste neu berechnen oder ordnen.

und der ruf der formelsprache als kompliziert und umständlich ist hoffentlich wieder etwas hergestellt!

schönen tag noch an alle

michael



Thomas Schulte:
Natürlich könnte man, wie es Michael sagt, das Ganze auch ohne @Transform lösen.

Aber ....

@Transform ist meiner Meinung nach einer der am meisten unterschätzten und wohl auch noch weithin unbekanntesten Formel Befehle die es in Notes gibt.

Man muss sich bei diesem Beispiel einfach mal anschauen wie der Counter realisiert ist.   >:D
Intern merkt sich Notes hier ganz einfach. Hey du fängst mit 0 an zu zählen (die Variable ist ja mit i:=0 als Zahl deklariert).
Du erhöhst den Zähler jeweils pro Element der Liste um 1 und fügst das Ergebnis an der ersten Stelle des Strings ein.
Ach ja und übrigens, deine Einfügeoperation ist gleichzeitig auch deine Rechenoperation mit der du den Counter erhöhst.

Wenn man es einmal begriffen hat genial einfach ...einfach genial.

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln