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.
-
-
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); -
-
@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
-
@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).
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden