HM-Skript: bestimmtes Element einer Liste ändern

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

HM-Skript: bestimmtes Element einer Liste ändern

Beitrag von dtp » 28.06.2019, 11:06

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
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Petrus
Beiträge: 134
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

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

Beitrag von Petrus » 19.12.2019, 13:08

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

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“