Das Notes Forum
Domino 9 und frühere Versionen => Administration & Userprobleme => Thema gestartet von: lenchen2 am 23.12.05 - 14:20:05
-
Hallo Experten!
Brauch mal wieder eure Hilfe...
Weiß jemand wie ich die Werte in einer Variable einem Rang zuweisen kann:
die Variable sieht so aus: [20;40;50;40;20;...] und jetzt soll in einer Schleife der höchste Wert eine 1 (für ersten Rang) zugewiesen bekommen, der zweithöchste Wert eine 2 (für zweiten Rang)...
Noch zur Erklärung - falls mein Ansatz ganz falsch ist...
Habe je ein Dokument pro Berater(immer gleiche Maske) in dem jeweils dargestellt ist welche Zielerreichung die einzelnen Berater haben (also z.B. Produkt1: 50 - für 50% Zielerreichung - Produkt2: 30 ...). Jetzt will ich bei jedem Berater anzeigen lassen wie gut er ist - also z.B. 1 für beste Zielerreichung im Vergleich zu den anderen Beratern in diesem Produkt.
Dachte mir ich könnte jeweils alle Berater-Werte pro Ziel in eine Variable packen und danach irgendwie schaun, welches der höchste Wert, zweithöchste Wert usw. ist - aber mir fehlt hierzu der Ansatz - den höchste und den niedrigsten würde ich ja noch rausbekommen, aber die zwischendrin... Hat jemand eine Idee?
Danke schon mal
Grüßle Lenchen2
-
Mit Skript würde ich sagen.
In 6 wurde in Formelsprache der Befehl @Sort eingeführt, der helfen könnte. Das er eingeführt wurde, kann als Hinweis darauf gesehen werden, dass die Funktionalität vorher fehlte.
In Java wurde mit 1.2 das Comparator Interface eingeführt, dass @Sort vermutlich inspiriert hat (sehr ähnlich), aber das gibts in Notes5 noch nicht.
Es ist eigentlich eine klassische Programmieraufgabe, ein paar Arrays in Beziehung zu setzen und neu zu sortieren. Ein direktes Beispiel habe ich aber jetzt auch nicht zur Hand und auch keine Zeit.
Es ist auf jeden Fall machbar. Nimm aber Skript, würd ich sagen.
-
Danke für die Antwort. Will's auf jedenfall in LotusScript machen, da das Ganze in einen Agenten integriert werden soll, der schon andere Felder befüllt.
Aber mir fehlt leider ein Ansatz, da die Werte in der Variable auf jeden Fall sortiert werden müssen. Und ich keine Ahnung hab wie ich in Lotus Script die Werte einer Variable nach der Größe sortieren soll.
Weiß das vielleicht jemand?
Könnt das Problem auch über eine Ansicht pro Produkt lösen, dann sind die Werte sortiert, aber hab halt ziemlich viele Produkte.
-
http://www.google.de/search?hl=de&q=Sorting+algorithm+lotusScript&btnG=Google-Suche&meta=
Du hast einmal diese Zahlen (nach denen sortiert werden soll) [20;40;50;40;20;...] und in einem anderen Feld die Mitarbeiternamen, zu denen diese Zahlen gehören?
Wenn das so ist, mußt du diese Wertepaare erstmal zu einer Einheit verbinden (etwa durch einen Type oder eine Class). Dann sortierst du nach der Zahl, z.B. mit einem dieser Sortieralgorythmen.
Das sieht interessant und ganz gut dokumentiert aus.
http://jens-seiler.de/lotusscript/tablejar/
-
Danke für die Antwort - denk ich werd ne Formel schreiben die die Inhalte dann in der richtigen Reihenfolge in eine neue Variable schreibt - aber heute nimmer. Jetzt ist erst mal Weihnachten.
Sobald ich sie hab füg ich sie unten an.
Natürlich bin ich auch für weitere Lösungsvorschläge dankbar
Schöne Weihnachten
-
So,
hab mir jetzt ne Schleife für das Problem programiert - vielleicht hilft's ja jemand weiter...
Falls natürlich jezt jemand sagt - " da gibt es doch eine viel einfachere Lösung" - wär ich für den Hinweis - und natürlich die dazugehörige Lösung - dankbar.
Wie gesagt wollte ich eine Rangliste machen, die mir aus einer Variablen mit beliebig sortierten Werten sagt welches der größte Wert ist, welches der zweitgrößte...
Hier meine Formel dazu
die Variable war ilbs()= ["6","6","","40","20"] ...
Und so sieht dann das Ergebnis aus: slbs()= [40,20,6,0]
jetzt ist slbs(1)=Rang1 ; slbs(2)=Rang2 usw.
(Ach ja und da es sich bei den Werten um % Angaben handelt - geht's bis max "100")
Gruß Lenchen2
...
t=-1
For i=Lbound(ilbs) To Ubound(ilbs)
t=t+1
a=-1
Redim Preserve slbs(t)
If t=0 Then
slbs(t)="101"
t=t+1
End If
slbs(t)="0"
For a=Lbound(ilbs) To Ubound(ilbs)
a=a+1
If ilbs(a)<>"" Then
If Int(slbs(t))<Int(ilbs(a)) And Int(ilbs(a))<Int(slbs(t-1)) Then
slbs(t)=ilbs(a)
End If
End If
Next
If slbs(t)="0" Goto ende 'sonst kommen zum Schluss immer 2 Nullen
If slbs(t)=slbs(t-1) Then 'damit die Werte nich mehrmals vorkommen
t=t-1
End If
Next
ende: