Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: m3 am 12.07.05 - 16:13:45

Titel: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
Beitrag von: m3 am 12.07.05 - 16:13:45
Hi!

Ich gebs zu, bei Listen bekomm ich immer einen Knoten im Kopf. ;)
Folgende Ausgangssituation:

Ich hab ein Multivaluefield (mfeld) mit folgenden 2 Eintraegen:

01|TextA1|TextA2|TextA3|TextA4
02|TextB1|TextB2|TextB3

Ich will nun mit Formelsprache diese beiden Zeilen so umformen, dass sowas dabei herauskommt:
01|01|01|01
02|02|02
Also der Text vor dem ersten "|" soll verschwinden, der Rest durch diesen ersetzt werden.

Mit
linkerteil := @Left(mfeld; "|");  { "01" : "02" }
rechterteil := @Right(mfeld; "|"); { "TextA1" : "TextA2" : "TextA3" : "TextA4" : "TextB1" : " TextB2" : "TextB3" }
haette ich ja schon mal zwei Listen mit den benoetigten Werten.

Aber was nun? Könnte mir wer einen Schlag auf den Hinterkopf geben, damit ich dieses Problem lösen kann.

Ich lobe für den Helfer auch ein Bierchen aus, wenn er mal in Wien ist. ;)
Titel: Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
Beitrag von: koehlerbv am 12.07.05 - 16:51:02
Mit @Left (Feldname; "|") bekommst Du den verbleibenden Teil heraus.
Mit @Explode bekommst Du eine temp. Liste der Elemente.
Mit @Elements bekommst Du die Anzahl der Einträge (pro temp. Liste), die Du noch dekrementieren musst.
Mit @Repeat kannst Du dann den verbleibenden Teil vervielfältigen. Das letzte Pipe-Symbol muss anschliessend noch weg.

Notes wendet das automatisch auf jedes Listenelement einzeln an.

Reicht Dir diese Prinzipbeschreibung für das ausgelobte Bier, Martin ?  ;D

HTH,
Bernhard
Titel: Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
Beitrag von: m3 am 12.07.05 - 17:08:16
Im Prinzip ja, aber ... ;)

Ich bekomme mit @explode() immer 7 zurueck, da die temp. Liste der Elemente anscheinend beide Zeilen zusammenzieht, was fuer meinen Anwendungsfall nicht passt.

Ich  braucht was, wo ich 4 bzw. 3 pro Listenwert zurueckbekomme, dann wuerde es passen. :(
Titel: Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
Beitrag von: Glombi am 12.07.05 - 17:52:03
Es geht mit etwas Left,Right, Implode, Explode  ;D

_Liste1 := @Subset(mfeld;1);
_Elem1 := @Left(_Liste1;"|");

_Liste2 := @Subset(mfeld;-1);
_Elem2 := @Left(_Liste2;"|");

_L1 := @Implode(@Right(@Explode(@Right(_Liste1;"|");"|") + ("#" + _Elem1);"#");"|");
_L2 := @Implode(@Right(@Explode(@Right(_Liste2;"|");"|") + ("#" + _Elem2);"#");"|");
_L1 : _L2

Andreas
der hofft bald in Wien zu sein  ;)
Titel: Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
Beitrag von: datenbanken24 am 12.07.05 - 18:02:17
und wenn es mehr als zwei Elemente sein sollten:

_NewList := @Transform(
   OldList;
   "x";
   @Do(
      _val1:= @Word( x; "|"; 1);
      _members:= @Elements(@Explode( x ; "|")) - 1;
      _newElem := _val1;
      @For(
          n := 1 ;
          n < _members;
          n := n + 1;
         ( _newElem := _newElem + "|" +_val1)
      );
   _newElem
   )
);


Sieht ein bißchen erschreckend aus,
aber sie tuts.
Titel: Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
Beitrag von: ..Andreas.. am 12.07.05 - 22:15:30
Oder so:

(geht sogar relativ übersichtlich in eine Zeile):

@Transform(mfeld;
           "x";
           @LeftBack(@Repeat(@Left(x; "|") + "|";
                   @Elements(@Explode(@Right(x; "|"); "|"))); "|")
          )


(wahlweise natürlich auch mit @Trim um Leerzeilen zu entfernen)

Andreas

EDIT: sehe gerade das ich ohne es zu wollen Bernhards Prinzipbeschreibung von oben umgesetzt habe, also Ehre, wem Ehre gebührt :EDIT
Titel: Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
Beitrag von: m3 am 13.07.05 - 07:43:53
Danke, danke, danke, danke!

Die postenden Herren haben ein Bierchen|Getränk der Wahl bei mir offen.

Listenverarbeitung ist meine Achillesferse, was Notesentwicklung betrifft.  :-\

Vielen herzlichen Dank!