Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: bikerboy am 02.02.09 - 16:41:45

Titel: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 02.02.09 - 16:41:45
Hallo...

also wie oben schon beschrieben.... Ich habe eine Liste mit serialisierten Strings.

Diese muss ich nun nach dem Datum und der Uhrzeit sortieren, die in der Liste vorhanden sind.

Leider finde ich keinen richtigen Ansatz. Meiner sah erstmal so aus .

_sortedList := @Sort(@TextToTime(@Middle(_unsortedList )));

@Transform(_sortedList ; "_key";
 @Transform( _unsortedList ; "_pos"  ;
  @Do(
   @if(@Middle(_pos) = _key ; _newList := _pos ; "")
  )
 )
)


Wie würdet ihr an meiner Stelle vorgehen ?

Das Problem ist, dass die Dinger auch noch numeriert werden müssen. Aber wenn ich erstmal nen Ansatz habe sollte ich das gewuppt kriegen, wie immer werde ich es noch weiter versuchen und mich melden, falls mir was cooles eingefallen ist.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: jBubbleBoy am 02.02.09 - 16:56:59
Ich würde das in LotusScript schreiben,
da bekommt man ja Kopfweh  ::)
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 02.02.09 - 17:04:26
Skript is nicht.... gute alte (@Functions)Schule is erwünscht
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 02.02.09 - 17:33:50
Zeig uns doch mal die Liste ....
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 02.02.09 - 17:50:03
Oder gleich die Lösung :

Code
_dLim1 := "|";
_dlim2 := "~"; 
_dlim5 := "|#|"; 
REM {Sortieren und neu numerieren};
_unsortedList := <FieldName>
_sortedList := @Sort(@TextToTime(@Left(@Right(_unsortedList;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_unsortedList;_dLim1 + "StartTime" + _dLim2);_dLim1))); 

@Transform(_sortedList ; "_key" ; 
	@Transform(_unsortedList ; "_position"; 
		@Do(	_posKey := @TextToTime(@Left(@Right(_position;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_position;_dLim1 + "StartTime" + _dLim2);_dLim1));
			@If( _posKey = _key ; 
				@Do(
					_newSortedList := _newSortedList : (@Text(@Elements(_newSortedList) + 1) + _dLim5 + @Right(_position ; _dLim5))
				)
				;""
			)
		)
	)
);

FIELD <FieldName> := @Trim(_newSortedList)

Schönen Abend noch.....

Bin auch für kompaktere Lösungen zu haben
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: guesswho am 02.02.09 - 17:56:26
Zitat
Skript is nicht.... gute alte (@Functions)Schule is erwünscht

warum ?!  :o

ist ja ein Mega-Stunt...muss das möglichst kompliziert sein, oder warum  ???

wenn ich jetzt grad so an den anderen Fred denke, dann kommen wohl die 90er wieder...  ;D

Jo
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 02.02.09 - 18:22:07
Öhhh einfach weil ich es will,

und in skript is es bestimmt auch nicht einfacher.

Und so kompliziert ist es doch gar nicht.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 02.02.09 - 18:27:46
Kannst du trotzdem einfach mal deine Ausgangsliste und dein gewünschtes Ergebnis posten.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: guesswho am 02.02.09 - 18:33:06
Zitat
Öhhh einfach weil ich es will
ok, akzeptiert

Zitat
und in skript is es bestimmt auch nicht einfacher
doch  ;D

Zitat
Und so kompliziert ist es doch gar nicht.
doch, wohl  >:(

ich sags so: für mich wär das nix  >:D

aber das will nix heissen
Jo


Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: jBubbleBoy am 02.02.09 - 18:33:24
... Und so kompliziert ist es doch gar nicht....
Warum dann die Fragen ...  ???
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 02.02.09 - 18:44:44
Liste poste ich morgen auf Arbeit
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 03.02.09 - 08:12:09
So hier nun die Liste :

"1|#||Route~Paderborn - Lippstadt Paderborn|StartDate~01.02.2006|StartTime~08:00:00|EndTime~15:00:00|
"2|#||Route~Paderborn - Hannover- Paderborn|StartDate~10.02.2006|StartTime~06:15:00|EndTime~00:00:00|
"3|#||Route~Paderborn - Hannover- Paderborn|StartDate~11.02.2006|StartTime~00:00:00|EndTime~21:00:00|
"4|#||Route~Paderborn - Hannover- Paderborn|StartDate~13.02.2006|StartTime~06:00:00|EndTime~00:00:00|
"5|#||Route~Paderborn - Hannover- Paderborn|StartDate~14.02.2006|StartTime~00:00:00|EndTime~21:00:00|
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: jBubbleBoy am 03.02.09 - 08:38:09
Ziehe Dir die Liste von Datum & Uhrzeit raus. Bastel dir daraus eine Liste von der Art JahrMonatTag-StundeMinute zusammen. Addiere die 2 Listen mit einem Trennzeichen, Sortiere die Liste, entferne wieder die Sortierhilfe.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 03.02.09 - 09:06:09
So mache ich es doch. Nur dass ich die Beiden Listen nicht addiere, sondern ich eine Hilfsliste baue und dir mir als Vorgabe für die neue Liste gillt.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: jBubbleBoy am 03.02.09 - 09:11:29
Was war nochmal dein Problem?
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 03.02.09 - 09:52:35
Die Liste ist dein Ergebnis. Oder? Die ursprüngliche Liste (dein Ausgangsmaterial) würde mich viel mehr interessieren.

Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 03.02.09 - 10:39:15
ja is in dem fall auch schon das ergebnis...

du kannst ja die daten einfach per hand ändern
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 03.02.09 - 12:34:35
hab die liste mal ein bisschen eingedampft....


andere Frage mit dem Code stosse ich doch auf nen Fehler, wenn ich 2 mal das selbe datum habe, oder ?
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 03.02.09 - 13:39:44
@jBubbleBoy

habe glaube erst jetzt verstanden , was du mir sagen wolltest.

Habe mal eine einfache list mit datum~wert genommen und durch @Sort() geschickt.

Das rennt ja einwandfrei.

Werde des gleich umbauen
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 03.02.09 - 14:09:34
Also .....

Wenn ich deine Liste nehme (ich hab die Startdatum Werte etwas verändert) ...

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

|#||Route~Paderborn - Hannover- Paderborn|StartDate~10.02.2006|StartTime~06:15:00|EndTime~00: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|

Und die durch deinen Code laufen lasse .....

Code
_dLim1 := "|";
_dlim2 := "~";
_dlim5 := "|#|";
REM {Sortieren und neu numerieren};
_unsortedList := SourceField;
_sortedList := @Sort(@TextToTime(@Left(@Right(_unsortedList;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_unsortedList;_dLim1 + "StartTime" + _dLim2);_dLim1)));

@Transform(_sortedList ; "_key" ;
	@Transform(_unsortedList ; "_position";
		@Do(	_posKey := @TextToTime(@Left(@Right(_position;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_position;_dLim1 + "StartTime" + _dLim2);_dLim1));
			@If( _posKey = _key ;
				@Do(
					_newSortedList := _newSortedList : (@Text(@Elements(_newSortedList) + 1) + _dLim5 + @Right(_position ; _dLim5))
				)
				;""
			)
		)
	)
);

FIELD SolutionBikerboy := @Trim(_newSortedList);


Dann kommt bei mir als Ergebnis diese Liste raus ....

1|#||Route~Paderborn - Hannover- Paderborn|StartDate~10.02.2006|StartTime~06:15:00|EndTime~00: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~21.02.2006|StartTime~00:00:00|EndTime~21:00:00|

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

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

Und ich denke mal das ist nicht das Ergebis das du da haben willst.

Das Problem das du da hast liegt hier ....
Code

@Do(
		@StatusBar(@Text(@Elements(_newSortedList) + 1));
		_newSortedList := _newSortedList : (@Text(@Elements(_newSortedList) + 1) + _dLim5 + @Right(_position ; _dLim5))
	)


Weil du beim ersten Durchlauf nämlich ZWEI Elemente von _newsortedlist erzeugst.

Außerdem hast du, zumindest mit der Liste die du uns da zur Verfügung gestellt hast noch ein anderes Problem ....

Schreib doch mal nach deinem Sort ein
Code
@StatusBar("SortedList");
@StatusBar(_sortedList);
Das gibt dir den Wert von _sortedList in die Statuszeile aus. Es würde mich sehr wundern, wenn du da etwas angezeigt bekommst.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 03.02.09 - 14:11:16
Also mit meiner Frage nach dem Fehler war in diesem Fall unberechtigt, da wir das Zeit Kriterium drin haben und es nicht möglich ist 2 Positionen mit dem selben Datum + Zeitwert zu versehen.

In anderen Listen habe ich die Idee von jBubbleBoy aufgenommen und für meine Ansprüche umgebaut. Bin gespannt was ihr davon haltet.


Code
dlim1 := "|" ;
_dlim2 := "~";
_dlim5 := "|#|" ;

_input := wert1 ;

_tmpList := 	@Right(@Sort(@Left(@Right(_input ; _dlim1 + "SlipDate" + _dlim2); _dlim1) + _dlim5 +  _input);_dlim5);

@For(_n := 1 ; _n <= @Elements(_tmpList); _n := _n + 1; 
	@Do(
		_entry := @Subset(@Subset(_tmpList ; _n) ; -1); 
		_value := @Left(@Right(_entry ; _dlim1 + "SlipNo" + _dlim2) ; _dlim1); 
		_from := "SlipNo" + _dLim2 + _value ; 
		_to := "SlipNo" + _dlim2 + @Text(_n); 
		_entry := @ReplaceSubString(_entry; _from; _to);
		_newList := _newList : _entry
	)
); 
	
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 03.02.09 - 14:19:54
Das die Zählung nicht stimmt habe ich auch festgestellt und auch lange gesucht, aber hier nun die verbesserte Funktion :

Code
@If(posDataString = "" ; @Return("") ; "");

_dLim1 := "|";
_dLim2 := "~";
_dLim3 := "#";
_dLim4 := "|~|" ;
_dLim5 := "|#|"  ;

REM {Sortieren und neu numerieren};

_unsortedList := posDataString;
_sortedList :=@Sort(@TextToTime(@Left(@Right(_unsortedList;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_unsortedList;_dLim1 + "StartTime" + _dLim2);_dLim1)));

@StatusBar("SortedList");
@StatusBar(_sortedList);

@Transform(_sortedList ; "_key" ;
	@Transform(_unsortedList ; "_position";
		@Do(	_posKey := @TextToTime(@Left(@Right(_position;_dLim1 + "StartDate" + _dLim2);_dLim1) + " " + @Left(@Right(_position;_dLim1 + "StartTime" + _dLim2);_dLim1));
			@If( _posKey = _key ;
				@Do(
					_newSortedList := _newSortedList : (@Text(@Elements(@Trim(_newSortedList)) + 1) + _dLim5 + @Right(_position ; _dLim5))
				)
				;""
			)
		)
	)
);

FIELD posDataString := @Trim(_newSortedList);
@True
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 03.02.09 - 14:21:42
Also .....
.....

Schreib doch mal nach deinem Sort ein
Code
@StatusBar("SortedList");
@StatusBar(_sortedList);
Das gibt dir den Wert von _sortedList in die Statuszeile aus. Es würde mich sehr wundern, wenn du da etwas angezeigt bekommst.

Das mit @Statusbar stimmt die List die hinten rausplummst ist aber richtig.

Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 03.02.09 - 14:24:09
Das ist richtig. Aber nur deshalb, weil du deinen Sort eigentlich in deinen Transforms machst.

dein Sort liefert nämlich wenn du es etwas genauer betrachtest nur eine Fehlermeldung zurück, weil er mit dem @textToTime das du verwendest nicht umgehen kann.

Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 03.02.09 - 14:48:29
Gut das raff ich ich nicht... also das @Sort sortiert nicht und in meinem @Transform sortiere ich doch auch nicht und trotzdem kommt das richtige ergebnis raus. Frei nach dem Motto - * - ergibt plus ?
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 03.02.09 - 15:01:50
In deinen beiden Transforms sortierst du schon ....

Nur wolltest du das nicht.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 03.02.09 - 17:20:24
Übrigens .....

Das hier ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Macht der von dir gepostete Code aus diesen ...

|#||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|

Ausgangsdaten..... 

>:D >:D >:D >:D >:D >:D >:D >:D >:D >:D

Und ja es gibt eine Lösung die mit einem @sort und einem @transform auskommt und die auf jeden Fall funktioniert.
Allerdings ist der @sort dann wenn man ihn ein wenig aufdröselt je nach Auflösung des Monitors ein 11 Zeiler.  ;D

Und wenn man zwei @transforms und einen @sort in der Form @transform .... @sort .... @transform benutzt, dann wird das ganze tatsächlich so langsam wieder lesbar. Dann werden es 4 Variablen die zugewiesen werden und drei Befehle.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: thomson666 am 04.02.09 - 09:48:09
auch wenn die Diskussion Script vom Tisch ist...

Sobald du 1x ein Problem mit der Formel hast und nicht weisst wo und warum, wirst du dir den Script wünschen...
Tommy
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: bikerboy am 04.02.09 - 10:04:30
auch wenn die Diskussion Script vom Tisch ist...

Sobald du 1x ein Problem mit der Formel hast und nicht weisst wo und warum, wirst du dir den Script wünschen...
Tommy

Jetzt nur mal aus Interesse, wie macht ihr solche Aktionen denn im Frontend ? Schreibt ihr globale Funktionen die dann aus allen möglichen Felder aufgerufen werden ?

Desweiteren hast du Recht, habe gestern ziemlich lang nach einem Fehler gesucht, aber ihn dennoch behoben.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 04.02.09 - 10:14:01
auch wenn die Diskussion Script vom Tisch ist...

Sobald du 1x ein Problem mit der Formel hast und nicht weisst wo und warum, wirst du dir den Script wünschen...
Tommy
Warum?

Auch wenn der Debugger für die Formelsprache nur ein kurzes, nicht sehr glorreiches Leben hatte, gibt es doch mindestens zwei Möglichkeiten dem was einer Formel intern macht auf den Grund zu gehen.

Die interaktive Variante ist @prompt
Und die andere, die leider auch nicht auf dem Server funktioniert ist @statusBar. Die hat dafür den Vorteil, das sie kombiniert mit ein paar Einträgen in der Notes.ini zu einer kompletten LogFile Lösung führen kann.

Mit beiden Varianten kann man Fehlern in Formeln relativ schnell auf die Spur kommen.

Jetzt nur mal aus Interesse, wie macht ihr solche Aktionen denn im Frontend ? Schreibt ihr globale Funktionen die dann aus allen möglichen Felder aufgerufen werden ?

Die Antwort auf diese Frage ist JA. das kann man so machen. Muss man aber nicht (nur wenn es wirklich komplex wird) wenn man die Formelsprache beherrscht.
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: horus am 04.02.09 - 12:15:16
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
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 04.02.09 - 13:10:46
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

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|
Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: horus am 04.02.09 - 13:26:57
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



Titel: Re: Serialisierte Liste nach Datum sortieren
Beitrag von: Thomas Schulte am 04.02.09 - 13:43:15
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.