Seite 1 von 1

HM-Skript: bestimmtes Element einer Liste ändern

Verfasst: 28.06.2019, 11:06
von dtp
Hallo,

will man mit einem HomeMatic-Skript ein bestimmtes Element einer Liste ändern, so geht das meines Wissens nach nur mit einer foreach-Schleife. Hier mal ein Beispiel:

Code: Alles auswählen

string list = "Dies|ist|ein|Test";
string changeIndex = 3;
integer cnt = 0;

string newList = ""; string element;

foreach(element, list.Split("|")){
  if(cnt == changeIndex){element = "Erfolg";}
  newList = newList#element#"|";
  cnt = cnt + 1;
}
list = newList.Substr(0, newList.Length()-1);

WriteLine(list);
Das obige Skript macht aus der Liste "Dies|ist|ein|Test" die neue Liste "Dies|ist|ein|Erfolg".

In anderen Programmiersprachen wäre das mit einem simplen Einzeiler der Form

Code: Alles auswählen

string list = "Dies|ist|ein|Test";
string changeIndex = 3;

list.NewValueByIndex(changeIndex) = "Erfolg";
möglich. Könnte man nicht etwas Ähnliches für die HomeMatic implementieren?

Gruß,

Thorsten

Re: HM-Skript: bestimmtes Element einer Liste ändern

Verfasst: 19.12.2019, 13:08
von Petrus
Hallo Thorsten,

das Thema ist zwar schon fast ein halbes Jahr alt, habe es aber gerade erst entdeckt.

Hier ein Einzeiler der das löst.

Code: Alles auswählen

string list = "Dies|ist|ein|Test";
integer changeIndex = 3;

list = list.Replace(list.StrValueByIndex("|", changeIndex), "Erfolg");
Ich gebe zu, "schöner" wäre es natürlich mit einer einzigen Funktion, statt der obigen Verschachtelung.

Gruß
Petrus