Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: udo187 am 29.04.14 - 13:48:37

Titel: Evaluate & @Sort & Datum
Beitrag von: udo187 am 29.04.14 - 13:48:37
Hallo !

Bitte um einen kurzen Denkanstoss:

Array mit x-Datumswerten, welche ich sortieren möchte.

Wert(0) = 20.12.2012
Wert(1) = 01.01.2014
Wert(2) = 05.10.2013


Ich verwende zum Sortieren gerne das "@Sort" mittels Evaluate.
Und Evaluate arbeitet mit Text -> wenn ich das Array mittels Implode umwandle,
werden die Datumswerte auch als Text sortiert, die Reihenfolge stimmt dann natürlich nicht.


Was mir einfällt:

Möglichkeit 1: Umwandeln der Datumswerte in Zahlen, sortieren und wieder in ein Datum zurückumwandeln
Möglichkeit 2: Werte im Array im Format "[20.12.2012]" hinterlegen - @Sort funktioniert dann auch


Oder ganz was anderes ?

Danke im Voraus für weitere Vorschläge !

Gruss
Udo
Titel: Re: Evaluate & @Sort & Datum
Beitrag von: Bastel123 am 29.04.14 - 13:54:59
Ich arbeite bei sowas immer mit dem Datumsformat YYYY-MM-DD hh:mm:ss.
Dann kann man schön sortieren und auch wieder zurück in ein datum umwandeln, da man ja einen definierten String hat,

Gruß
Sebastian
Titel: Re: Evaluate & @Sort & Datum
Beitrag von: pram am 29.04.14 - 15:05:52
Zitat
Und Evaluate arbeitet mit Text -> wenn ich das Array mittels Implode umwandle,
Warum wandelst du es denn in Text um?

Gruß
Roland
Titel: Re: Evaluate & @Sort & Datum
Beitrag von: udo187 am 29.04.14 - 16:02:46
Evaluate benötigt als Input einen String, daher zuerst das Implode.
Oder liege ich hier falsch ?

Gruss
Udo
Titel: Re: Evaluate & @Sort & Datum
Beitrag von: pram am 29.04.14 - 17:19:19
Hallo Udo,

Vermutlich machst du folgendes:
Code
s = Implode(arr,|":"|)
v = Evaluate(|@Sort("| + s + |")|)
Dieser Code ist "böse", da durch eine gezielte Falscheingabe in "arr" Formelcode eingeschleußt werden kann (@Formula-injection, Erklärung siehe hier: http://atnotes.de/index.php/topic,55469.msg357844.html#msg357844)

Außerdem dürfen Formeln nicht länger als 2048 Zeichen sein.

Besser ist:
Code
tmpDoc = new NotesDocument(db)
tmpDoc.toSort = arr
v = Evaluate("@Sort(toSort)", tmpDoc)
Dann funktioniert das auch korrekt mit Datumswerten und bis zur 32k-Grenze


Gruß
Roland

Titel: Re: Evaluate & @Sort & Datum
Beitrag von: udo187 am 30.04.14 - 07:11:43
Guten Morgen Roland,

danke für deinen Hinweis.
Mein Code sah genau so aus wie Du vermutet hattest.

Mit dem temporären Dokument funktioniert die Sortierung wie gewünscht.
Einfacher und keine Zeichenbeschränkung -> was will man mehr  :)


Danke !

Gruss
Udo