Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: bikerboy am 12.03.08 - 17:53:20

Titel: Listenfelder mit @Functions bearbeiten
Beitrag von: bikerboy am 12.03.08 - 17:53:20
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))


	

Das zusammenfassen der ID ist noch leicht aber mit der Schachtelung der @for-Schleifen habe ich auf den späten Abend meine Probleme
Titel: Re: Listenfelder mit @Functions bearbeiten
Beitrag von: bikerboy am 12.03.08 - 18:05:42
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))


	

Titel: Re: Listenfelder mit @Functions bearbeiten
Beitrag von: koehlerbv am 12.03.08 - 18:24:59
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))

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.
Titel: Re: Listenfelder mit @Functions bearbeiten
Beitrag von: bikerboy am 13.03.08 - 07:40:30
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
Titel: Re: Listenfelder mit @Functions bearbeiten
Beitrag von: Fineas am 13.03.08 - 13:10:58
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) )
Titel: Re: Listenfelder mit @Functions bearbeiten
Beitrag von: bikerboy am 14.03.08 - 10:33:37
@Fineas

Ich bin immer noch begeistert von dem @Transform