Autor Thema: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?  (Gelesen 1872 mal)

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
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. ;)
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
« Antwort #1 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

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
« Antwort #2 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. :(
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Glombi

  • Gast
Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
« Antwort #3 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  ;)

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
« Antwort #4 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.

Offline ..Andreas..

  • Junior Mitglied
  • **
  • Beiträge: 60
  • Geschlecht: Männlich
  • Brevity is the soul of wit.
Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
« Antwort #5 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
« Letzte Änderung: 13.07.05 - 01:10:38 von ..Andreas.. »

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Listen und @Formulas - Hab ich ein Brett vor dem Kopf?
« Antwort #6 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!
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz