JavaScript - GREP?

Wie man einen Adapter entwickelt, oder wie man debuggen kann.
Antworten
darkiop
professional
Beiträge: 120
Registriert: 02.02.2018, 22:16

JavaScript - GREP?

Beitrag von darkiop » 12.08.2018, 07:31

Guten Morgen, ich speichere in einer Variable folgendes:

Code: Alles auswählen

            <script type="text/javascript" language="javascript">
                var valSettings = new Array();
            var jsvalues = new Array();
            var jsobj;
                jsobj = new Array();
            jsobj['id']='val14a';
            jsobj['val']='21,0';
            jsvalues.push(jsobj);
            valSettings['val5'] = new Array();
            valSettings['val5']['type'] = 'float';
            valSettings['val5']['min'] = '10';
            valSettings['val5']['max'] = '30';
            jsobj = new Array();
            jsobj['id']='val5info';
            jsobj['val']='17,0';
            jsvalues.push(jsobj);
            jsobj = new Array();
            jsobj['id']='val11a';
            jsobj['val']='44,7';
            jsvalues.push(jsobj);
            valSettings['val17'] = new Array();
            valSettings['val17']['type'] = 'float';
            valSettings['val17']['min'] = '10';
            valSettings['val17']['max'] = '55';
            jsobj = new Array();
            jsobj['id']='val17info';
            jsobj['val']='44,0';
            jsvalues.push(jsobj);
            jsobj = new Array();
            jsobj['id']='val82a';
            jsobj['val']='1';
            jsvalues.push(jsobj);
            valSettings['val82'] = new Array();
            valSettings['val82']['type'] = 'float';
            valSettings['val82']['min'] = '0';
            valSettings['val82']['max'] = '3';
            jsobj = new Array();
            jsobj['id']='val82info';
            jsobj['val']='1';
            jsvalues.push(jsobj);
            </script>
Dies möchte ich nun weiter verarbeiten und beispielsweise nur das letzte "jsobj['val']='1';" bzw. dessen Wert von 1 in der Variablen haben. Die Daten hole ich mittels cheerioReq.

Wie kann ich das gewünschte mittels JS greppen?

Danke und einen schönen Sonntag!

Grüße Thorsten

Code: Alles auswählen

cheerioReq('http://' + adapter.config.isgIP, (err, $) => {
  
  var value = $('script').last();
  if (debugging === true) adapter.log.info('ScriptParse: ' + value);
  
  /*
  <script type="text/javascript" language="javascript">
      var valSettings = new Array();
  var jsvalues = new Array();
  var jsobj;
      jsobj = new Array();
  jsobj['id']='val14a';
  jsobj['val']='21,0';
  jsvalues.push(jsobj);
  valSettings['val5'] = new Array();
  valSettings['val5']['type'] = 'float';
  valSettings['val5']['min'] = '10';
  valSettings['val5']['max'] = '30';
  jsobj = new Array();
  jsobj['id']='val5info';
  jsobj['val']='17,0';
  jsvalues.push(jsobj);
  jsobj = new Array();
  jsobj['id']='val11a';
  jsobj['val']='44,7';
  jsvalues.push(jsobj);
  valSettings['val17'] = new Array();
  valSettings['val17']['type'] = 'float';
  valSettings['val17']['min'] = '10';
  valSettings['val17']['max'] = '55';
  jsobj = new Array();
  jsobj['id']='val17info';
  jsobj['val']='44,0';
  jsvalues.push(jsobj);
  jsobj = new Array();
  jsobj['id']='val82a';
  jsobj['val']='1';
  jsvalues.push(jsobj);
  valSettings['val82'] = new Array();
  valSettings['val82']['type'] = 'float';
  valSettings['val82']['min'] = '0';
  valSettings['val82']['max'] = '3';
  jsobj = new Array();
  jsobj['id']='val82info';
  jsobj['val']='1';
  jsvalues.push(jsobj);
  </script>
  */

});
Grüße Thorsten

Benutzeravatar
apollon77
guru
Beiträge: 5755
Registriert: 10.04.2015, 12:27

Re: JavaScript - GREP?

Beitrag von apollon77 » 12.08.2018, 07:39

Du kannst regex oder String Funktionen nutzen.

String Funktionen wie lastIndexOf ... und dann mit substring arbeiten ... macht keinen Spaß aber geht.


Gesendet vom Handy ...
How-to:
* Debug-Log für einen Adapter/Instanz einschalten? -> Instanzen -> Expertenomodus -> Spalte Loglevel

darkiop
professional
Beiträge: 120
Registriert: 02.02.2018, 22:16

Re: JavaScript - GREP?

Beitrag von darkiop » 12.08.2018, 08:18

Hallo Ingo, schau ich mir mal an. Mal schauen wie weit ich da komme - regex und ich waren bisher noch keine Freunde :D
Grüße Thorsten

darkiop
professional
Beiträge: 120
Registriert: 02.02.2018, 22:16

Re: JavaScript - GREP?

Beitrag von darkiop » 12.08.2018, 10:39

So, hab da jetzt nach einigen Versuchen doch was hinbekommen, aber ich denke schön ist wirklich anders :)

Code: Alles auswählen

var value = $('script').last().toString();
//adapter.log.info('cherrio-req: ' + value);

var replacelinebreak = value.replace(/\n|\r/g, '');
adapter.log.info('replacelinebreak: ' + replacelinebreak);

var index = replacelinebreak.indexOf("val82info").toString();
adapter.log.info('indexof: ' + index);

var start = parseFloat(index) + 25;
adapter.log.info('start: ' + start);

// Select Test
var end = index + 50;
var substrTest = replacelinebreak.substring(index, end);
adapter.log.info('substringTest: ' + substrTest);

var end = start + 1;
adapter.log.info('end: ' + end);

// Value
var substr = replacelinebreak.substring(start, end);
adapter.log.info('substring: ' + substr);
Das Log, letzte Zeile meine Gewünschte '3':

Code: Alles auswählen

2018-08-12 11:37:54.513  - info: stiebel-lwz.0 replacelinebreak: <script type="text/javascript" language="javascript">  var valSettings = new Array();  var jsvalues = new Array();  var jsobj;        jsobj = new Array();jsobj['id']='val14a';jsobj['val']='21,0';jsvalues.push(jsobj);valSettings['val5'] = new Array();valSettings['val5']['type'] = 'float';valSettings['val5']['min'] = '10';valSettings['val5']['max'] = '30';jsobj = new Array();jsobj['id']='val5info';jsobj['val']='17,0';jsvalues.push(jsobj);jsobj = new Array();jsobj['id']='val11a';jsobj['val']='45,6';jsvalues.push(jsobj);valSettings['val17'] = new Array();valSettings['val17']['type'] = 'float';valSettings['val17']['min'] = '10';valSettings['val17']['max'] = '55';jsobj = new Array();jsobj['id']='val17info';jsobj['val']='44,0';jsvalues.push(jsobj);jsobj = new Array();jsobj['id']='val82a';jsobj['val']='3';jsvalues.push(jsobj);valSettings['val82'] = new Array();valSettings['val82']['type'] = 'float';valSettings['val82']['min'] = '0';valSettings['val82']['max'] = '3';jsobj = new Array();jsobj['id']='val82info';jsobj['val']='3';jsvalues.push(jsobj);</script>
2018-08-12 11:37:54.514  - info: stiebel-lwz.0 indexof: 999
2018-08-12 11:37:54.514  - info: stiebel-lwz.0 start: 1024
2018-08-12 11:37:54.514  - info: stiebel-lwz.0 substringTest: val82info';jsobj['val']='3';jsvalues.push(jsobj);</script>
2018-08-12 11:37:54.515  - info: stiebel-lwz.0 end: 1025
2018-08-12 11:37:54.515  - info: stiebel-lwz.0 substring: 3
Jetzt hoffe ich nur das sich da nichts mehr verschiebt, habe deshalb bewusst nach 'val82info' gesucht und dann die Zeichen nach 'vorne' dazugezählt.
Grüße Thorsten

Benutzeravatar
apollon77
guru
Beiträge: 5755
Registriert: 10.04.2015, 12:27

Re: JavaScript - GREP?

Beitrag von apollon77 » 12.08.2018, 10:42

Mit regex ist man ein bissl flexibler in Bezug auf Änderungen. Aber ist aufwändiger.

Ich nutze immer regex101.com zum bauen/experimentieren.


Gesendet vom Handy ...
How-to:
* Debug-Log für einen Adapter/Instanz einschalten? -> Instanzen -> Expertenomodus -> Spalte Loglevel

Antworten