Domino 9 und frühere Versionen > ND6: Entwicklung

Listenfelder mit @Functions bearbeiten

(1/2) > >>

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