Autor Thema: Listenfelder mit @Functions bearbeiten  (Gelesen 2071 mal)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Listenfelder mit @Functions bearbeiten
« 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
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Listenfelder mit @Functions bearbeiten
« Antwort #1 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))


	

Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Listenfelder mit @Functions bearbeiten
« Antwort #2 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.

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Listenfelder mit @Functions bearbeiten
« Antwort #3 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
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Fineas

  • Aktives Mitglied
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
  • PCLP Dev/Admin 5,6,7,8
Re: Listenfelder mit @Functions bearbeiten
« Antwort #4 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) )
« Letzte Änderung: 13.03.08 - 13:15:24 von Fineas »

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Listenfelder mit @Functions bearbeiten
« Antwort #5 am: 14.03.08 - 10:33:37 »
@Fineas

Ich bin immer noch begeistert von dem @Transform
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz