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 .
_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
Habs;
_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))
Das geht aber einfacher (mit der Macht der Listenfunktionen).
Hier mal ein Beispiel:
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.