NEWS
string zerlegen
-
Re: Iobroker und Signal Messenger
Hallo,
Ich bin schon mal ein Stück weiter und habe das ganze mit signal-cli und einem node-red exec Aufruf hinbekommen das ich beim Empfangen schon mal einen string im msg.payload habe der dann so aussieht:"Envelope from: +12345678 (device: 1);Timestamp: 1585568553483 (2020-03-30T11:42:33.483Z);Sender: +12345678 (device: 1);Message timestamp: 1585568553483 (2020-03-30T11:42:33.483Z);Body:Das ist eine Testmeldung;"
Eventuell kann mir jemand beim Zerlegen des string's helfen. Benötigen würde ich folgende Werte:
-
Von Envelope from: +12345678
-
Von Timestamp 2020-03-30T11:42:33
-
und alles rechts von Body: Das ist eine Testmeldung
Mit einer Funktion in Node-Red müsste das doch lösbar sein.
-
-
@peppino sagte:
Mit einer Funktion in Node-Red müsste das doch lösbar sein.
Von Node-Red habe ich keine Ahnung, aber mit Javascript sollte es so funktionieren:
let str = "Envelope from: +12345678 (device: 1);Timestamp: 1585568553483 (2020-03-30T11:42:33.483Z);Sender: +12345678 (device: 1);Message timestamp: 1585568553483 (2020-03-30T11:42:33.483Z);Body:Das ist eine Testmeldung"; let arr = str.split(';'); // zerlegt String in ein Array mit Kriterium ";" als Trennzeichen im String let obj = {}; // leeres Objekt for(let i = 0; i < arr.length; i++) { // über alle Array-Elemente let pos = arr[i].indexOf(':'); // Im Array-Element erstes Auftreten von ":" ermtteln let ele = arr[i].substring(0, pos).replace(' ', '_'); // Bezeichener für Objekt separieren und Leerzeichen durch "_" ersetzen let attr = arr[i].substring(pos + 1); // Objekt-Attribut separieren (Rest hinter 1. Doppelpunkt) if(ele == 'Timestamp') attr = formatDate(parseInt(attr), 'DD.MM.JJ hh:mm:ss'); // wandelt ms in lesbare Zeit obj[ele] = attr; // Objekt um neues Attribut ergänzen } log(obj.Envelope_from); log(obj.Timestamp); log(obj.Body);
-
@paul53 said in string zerlegen:
@peppino sagte:
Mit einer Funktion in Node-Red müsste das doch lösbar sein.
Von Node-Red habe ich keine Ahnung, aber mit Javascript sollte es so funktionieren:
let str = "Envelope from: +12345678 (device: 1);Timestamp: 1585568553483 (2020-03-30T11:42:33.483Z);Sender: +12345678 (device: 1);Message timestamp: 1585568553483 (2020-03-30T11:42:33.483Z);Body:Das ist eine Testmeldung"; let arr = str.split(';'); let obj = {}; for(let i = 0; i < arr.length; i++) { let pos = arr[i].indexOf(':'); let ele = arr[i].substring(0, pos).replace(' ', '_'); let attr = arr[i].substring(pos + 1); if(ele == 'Timestamp') attr = formatDate(parseInt(attr), 'DD.MM.JJ hh:mm:ss'); obj[ele] = attr; } log(obj.Envelope_from); log(obj.Timestamp); log(obj.Body);
Danke Paul!
In Javascript funktioniert es einwandfrei.
Im Node-Red kennt er formatDate nicht.ReferenceError: formatDate is not defined (line 15, col 28)
Willst du mir eventuell die Code Zeilen etwas kommentieren was in den jeweiligen Zeilen passiert, ich lerne gerne mit
Bg
Joe
-
@peppino sagte:
Code Zeilen etwas kommentieren was in den jeweiligen Zeilen passiert
Erledigt (siehe oben).
-
@paul53 said in string zerlegen:
@peppino sagte:
Code Zeilen etwas kommentieren was in den jeweiligen Zeilen passiert
Erledigt (siehe oben).
Danke Dir!