Autor Thema: Serialisierte Liste nach Datum sortieren  (Gelesen 12402 mal)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Serialisierte Liste nach Datum sortieren
« Antwort #20 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
	)
); 
	
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Serialisierte Liste nach Datum sortieren
« Antwort #21 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
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Serialisierte Liste nach Datum sortieren
« Antwort #22 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.

Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Serialisierte Liste nach Datum sortieren
« Antwort #23 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.

« Letzte Änderung: 03.02.09 - 14:30:54 von Thomas Schulte »
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Serialisierte Liste nach Datum sortieren
« Antwort #24 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 ?
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Serialisierte Liste nach Datum sortieren
« Antwort #25 am: 03.02.09 - 15:01:50 »
In deinen beiden Transforms sortierst du schon ....

Nur wolltest du das nicht.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Serialisierte Liste nach Datum sortieren
« Antwort #26 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.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: Serialisierte Liste nach Datum sortieren
« Antwort #27 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

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Serialisierte Liste nach Datum sortieren
« Antwort #28 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.
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Serialisierte Liste nach Datum sortieren
« Antwort #29 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.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline horus

  • Frischling
  • *
  • Beiträge: 4
  • Geschlecht: Männlich
Re: Serialisierte Liste nach Datum sortieren
« Antwort #30 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
michael

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Serialisierte Liste nach Datum sortieren
« Antwort #31 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|
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline horus

  • Frischling
  • *
  • Beiträge: 4
  • Geschlecht: Männlich
Re: Serialisierte Liste nach Datum sortieren
« Antwort #32 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



michael

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Serialisierte Liste nach Datum sortieren
« Antwort #33 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.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz