Autor Thema: ArrayUnique  (Gelesen 4279 mal)

Offline mikesmurph

  • Frischling
  • *
  • Beiträge: 27
  • Ja was muss denn da noch alles rein ... !?!?
ArrayUnique
« am: 21.12.11 - 12:51:40 »
Hallo zusammen,

ich steh mir grad wohl selbst im Weg...

Ich habe ein Dokumentenfeld PROF_Mat_EW_Wert vom Typ Text bei dem Mehrfachwerte zugelassen sind, und bei den Optionen für Mehrfachwerte folgendes drin steht:
Werte trenne bei Eingabe von : Komma, Semikolon, Neue Zeile
Getrennte Werte anzeigen mit: Neue Zeile

Der Inhalt des Feldes ist z.B.

Unwahrscheinlich
Unwahrscheinlich
Möglich
Möglich
Unwahrscheinlich
Möglich
Wahrscheinlich
Wahrscheinlich
Möglich
Wahrscheinlich
Wahrscheinlich
Sehr Wahrscheinlich
Möglich
Wahrscheinlich
Sehr Wahrscheinlich
Sehr Wahrscheinlich

Ich möchte jetzt aus den Werten eine Liste erstellen, in der alle Werte nur einmal auftauchen, also Duplikate entfernt sind.
Dazu nehme ich z.B. die folgende Funktion:

Code
sz1=Arrayunique(Split(uidoc.FieldGetText("PROF_Mat_EW_Wert"),Chr(13)))
   

Das Funzt auch soweit, nur wird der erste Eintrag immer doppelt angezeigt!
Hab das auch schon über eine Stringliste mit folgendem Code versucht:

Code
	Forall sx In sz1
		sz(sx)=sx	
	End Forall

Hat aber auch nichts gebracht. Irgendwie zweifle ich grad an mir selber.
Vielleicht kann mir jemand auf die Schnelle weiterhelfen.

vielen Dank und Grüße aus dem verschneiten Schwarzwald.

Michael

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: ArrayUnique
« Antwort #1 am: 21.12.11 - 13:23:49 »
wie wärs über ein Evaluate ?

dim feldwert as string
dim liste as variant
feldwert = uidoc.fieldgetText("Prof_mat_ew_wert")
liste = evaluate({@Sort(@unique(@explode("} & feldwert & {";@newLine)));})
if isarray(liste) then

end if
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: ArrayUnique
« Antwort #2 am: 21.12.11 - 13:30:53 »
OT, aber weil ich es grad sehe:
Code
sz1=Arrayunique(Split(uidoc.FieldGetText("PROF_Mat_EW_Wert"),Chr(13)))
Split sollte man nie als Argument in einer Funktion verwenden, sondern immer erst einem Variant zuweisen
https://www-304.ibm.com/support/docview.wss?uid=swg21169330
geht zwar meistens gut, aber manchmal kracht es.
Neben Split gehören da alle nativen Arrayfunktionen dazu (Replace/split/fulltrim/arrayunique)

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: ArrayUnique
« Antwort #3 am: 21.12.11 - 13:41:42 »
Ausserdem würde ich NICHT das Frontend- Dokument nehmen (evtl. geht das mit dem Chr(13) da schief), sondern

uidoc.Document.GetItemValue( "PROF_Mat_EW_Wert" ), dann kriegst Du schon ein sauberes Array, mit dem Du weiterarbeiten kannst, ohne Split...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Fineas

  • Aktives Mitglied
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
  • PCLP Dev/Admin 5,6,7,8
Re: ArrayUnique
« Antwort #4 am: 21.12.11 - 13:50:15 »
einfach und effizient:

FIELD DEINFELDNAME := @Unique( DEINFELDNAME);

oder

DEINEVARIABLE := @Unique( DEINFELDNAME);

Wenn es in LS ausgewertet werden soll, dann einfach ein zweites (verstecktes) Feld mit @unique auf das erste Feld und jenes dann auswerten. Auf diese Weise hat man die Basisdaten und die aufgeräumten Daten im Griff.

Gruß, Heiko
« Letzte Änderung: 21.12.11 - 13:52:52 von Fineas »

Offline mezz

  • Junior Mitglied
  • **
  • Beiträge: 69
Re: ArrayUnique
« Antwort #5 am: 21.12.11 - 14:07:58 »
wie wärs über ein Evaluate ?

dim feldwert as string
dim liste as variant
feldwert = uidoc.fieldgetText("Prof_mat_ew_wert")
liste = evaluate({@Sort(@unique(@explode("} & feldwert & {";@newLine)));})
if isarray(liste) then

end if


auch noch eine kleinigkeit zu meckern :)

derartige konstrukte sollte man am besten aus dem gedächtnis verbannen und statt evaluate direkt zu benutzen lieber einen wrapper schreiben um code injections zu verhindern.

perl -e 's,,q#$:%*?:!&=(:!>@.#.$/,e;y;!-./:-@[-]{-~; a-uJP;;print;'

Offline Fineas

  • Aktives Mitglied
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
  • PCLP Dev/Admin 5,6,7,8
Re: ArrayUnique
« Antwort #6 am: 21.12.11 - 14:19:28 »
@mezz:

Lustiger Gedanke: Code Injections in LND ...

Wer ein solches Konstrukt derart durchschaut, dass er dazu in der Lage wäre, der würde sich nicht diese Mühe machen, um etwas destruktiv zu bearbeiten, sondern direkter vorgehen  ;)

Formal ist der Einwand aber natürlich gerechtfertigt.

Heiko

Offline mezz

  • Junior Mitglied
  • **
  • Beiträge: 69
Re: ArrayUnique
« Antwort #7 am: 21.12.11 - 14:58:14 »
@mezz:

Lustiger Gedanke: Code Injections in LND ...

Wer ein solches Konstrukt derart durchschaut, dass er dazu in der Lage wäre, der würde sich nicht diese Mühe machen, um etwas destruktiv zu bearbeiten, sondern direkter vorgehen  ;)

Formal ist der Einwand aber natürlich gerechtfertigt.

Heiko

lustig ist das keineswegs, es ist sogar ein relativ großes problem das gerne heruntergespielt wird. ;)

  • ein entsprechend manipulierter wert kann auch einem anderen benutzer untergeschoben werden.
  • derartiger code wird auch oft in agenten, teilweise auch für öffentlich zugängliche webanwendungen, verwendet.
  • ausserdem kann man es durchaus leicht vermeiden.

perl -e 's,,q#$:%*?:!&=(:!>@.#.$/,e;y;!-./:-@[-]{-~; a-uJP;;print;'

Offline mikesmurph

  • Frischling
  • *
  • Beiträge: 27
  • Ja was muss denn da noch alles rein ... !?!?
Re: ArrayUnique
« Antwort #8 am: 23.12.11 - 10:54:34 »
Hallo zusammen,

danke für die Hilfe. Ich werde wohl die Lösung von Fineas nehmen. Scheint mir am klarsten gelöst, vor allem in 2 Monaten noch nachvollziehbar  ;D

Wünsche allen noch schönes Weihnachtsfest und ein gutes und erfolgreiches 2012!!

Viele Grüsse

Michael

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz