Domino 9 und frühere Versionen > ND6: Entwicklung
Listenfelder mit @Functions bearbeiten
bikerboy:
Hallo ,
stehe hier gerade auf dem Schlauch ;
Ich habe eine Listenfeld in dem Werte mit folgendem Aufbau stehen,
_key + "~" + _stunden
Nun wollte ich mit folgendem Code erreichen, das er erst die _keys einmalig macht und danach durch eine Liste geht und die Stunden zusammen rechnet so dass ich am ende zu jedem _key die gesamt Stunden habe. Folgender Code ist meinem Kopf dabei entfallten .
--- Code: ---_del := "~";
_data := posDataContingent;
_listIIDz := @For(_n := 1 ; _n <= @Elements(_data); _n := _n +1 ;
@Do(
_value := @Word(@Subset(@Subset(_data;_n);-1) ; _del;1);
@If(_value != "0"; _list := _list : _value ;"")
);
_list := @Unique(_list)
);
@Prompt([ok];"_IDList";@Implode(_list;@NewLine));
@For(_n := 1 ; _n <= @Elements(_list); _n := _n +1;
@Do(
_currentID := @Subset(@Subset(_list; _n);-1);
@For(_m := 1 ; _m <=@Elements(_data); _m := _m + 1;
@Do(
_id := @Word(@Subset(@Subset(_data;_m);-1) ; _del;1);
_hours := @TexttoNumber(@Word(@Subset(@Subset(_data;_m);-1) ; _del;2));
@If(_id = _currentID ; _totalHours := _totalHours + _hours; "")
)
);
_newEntry := _id + _del + @Text(_totalHours);
_resultList := _resultList : _newEntry;
_totalHours := 0
)
);
@Prompt([ok];"_resultList";@Implode(_resultList;@NewLine))
--- Ende Code ---
Das zusammenfassen der ID ist noch leicht aber mit der Schachtelung der @for-Schleifen habe ich auf den späten Abend meine Probleme
bikerboy:
Habs;
--- Code: ---_del := "~";
_data := posDataContingent;
_listIIDz := @For(_n := 1 ; _n <= @Elements(_data); _n := _n +1 ;
@Do(
_value := @Word(@Subset(@Subset(_data;_n);-1) ; _del;1);
@If(_value != "0"; _list := _list : _value ;"")
);
_list := @Trim(@Unique(_list))
);
@For(_n := 1 ; _n <= @Elements(_list); _n := _n +1;
@Do(
_currentID := @Subset(@Subset(_list; _n);-1);
_totalHours := 0;
@For(_m := 1 ; _m <=@Elements(_data); _m := _m + 1;
@Do(
_id := @Word(@Subset(@Subset(_data;_m);-1) ; _del;1);
_hours := @TexttoNumber(@Word(@Subset(@Subset(_data;_m);-1) ; _del;2));
@If(_id = _currentID ; _totalHours := _totalHours + _hours; "")
)
);
_newEntry := _currentID + _del + @Text(_totalHours);
_resultList := _resultList : _newEntry
)
);
@Prompt([ok];"_resultList";@Implode(_resultList;@NewLine))
--- Ende Code ---
koehlerbv:
Das geht aber einfacher (mit der Macht der Listenfunktionen).
Hier mal ein Beispiel:
--- Code: ---a := "bla~10" : "oops~2";
b := @Right (a; "~");
c := @TextToNumber (b);
d := @Sum (c);
@Prompt ([OK]; "Result"; @Text (d))
--- Ende Code ---
Das ist step by step und kann letztlich auf eine Zeile zusammengefasst werden (dann wird es für den Anfänger aber unübersichtlich).
HTH,
Bernhard
PS: Bei Fragen bitte melden.
bikerboy:
hmmm,
ja würde dir doch aber nicht zu den verschiedenen _keys die passenden Stunden zusammen rechnen, oder hab ich das jetzt verplant, hatte noch keinen Kaffee
Fineas:
Hi Robert,
versuch mal damit:
@Transform(@Unique(@left(LISTENFELD;"~")); "XXX"; XXX +"~"+ @Text(@Sum(@ToNumber(@Transform(LISTENFELD;"YYY";@If(@Left(YYY;"~") = XXX; @Right(YYY;"~");"0"))))))
LISTENFELD ist das Datenfeld. Formel in ein zweites berechnetes Feld. @Transform ist übel, aber effizient.
Getestet mit:
a~1
b~2
c~3
a~4
Ergebnis:
a~5
b~2
c~3
Gruß, Fineas! ( alias @functionKing ;o) )
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln