if anweisung ist nicht gleich obwohl er es ist

gianfranco0104

Erfahrenes Mitglied
Hi, stehe grad voll auf dem Schlauch - werde noch wahnsinnig.

mit folgendem Code lese ich aus einem Textfile 4 Möglichkeiten ein. Danach versuche ich sie mit einer IF-Anweisung, je nach dem was eingelesen wurde mit aufgaben zu versehen.
Im Debugg, ist die Variable korrekt beschrieben worden. auch in der IF-Anweisung ist es noch korrekt, doch der Browser sagt der Vergleich stimmt nicht über ein und führt dann nicht aus. wo ist der Haken?
im code die Kommentare beachten, dort ist ein Beispiel drin.

Javascript:
var whatIsRten = (editor.session.getTextRange(row)); //liest Text von (start_#z_SavePos) + nächste Zeile
    //R10 und (_#frstMeasuredValve=) aufteilen
    var rTEN              = whatIsRten.match(/R10=0/g);
    var rTENrewriteer      = whatIsRten.match(/R10=/g);
    var frstMeasuredValve = whatIsRten.match(/frstMeasuredValve=D1/g) || whatIsRten.match(/frstMeasuredValve=D2/g) || whatIsRten.match(/frstMeasuredValve=D3/g) || whatIsRten.match(/frstMeasuredValve=D4/g);
    // im Text steht einer der Matches. Beispiel "frstMeasuredValve=D2"
    alert(frstMeasuredValve) //passt, es wird "frstMeasuredValve=D2" ausgegeben

    if(frstMeasuredValve === 'frstMeasuredValve=D1' ) { saveStartZposD01Firstime = true; };
    if(frstMeasuredValve === 'frstMeasuredValve=D2' ) { saveStartZposD02Firstime = true; }; //sollte auf true gehen, allerdings macht er das nicht, frstMeasuredValve =  "frstMeasuredValve=D2" IST
    if(frstMeasuredValve === 'frstMeasuredValve=D3' ) { saveStartZposD03Firstime = true; };
    if(frstMeasuredValve === 'frstMeasuredValve=D4' ) { saveStartZposD04Firstime = true; };
    alert(saveStartZposD01Firstime + " " + saveStartZposD02Firstime + " " + saveStartZposD03Firstime + " " + saveStartZposD04Firstime) //zeigt alle false; SOLLTE ABER "SaveStartZposD02Firstime = TRUE" zeigen
 
Wenn mich nicht alles täuscht, müsste String.prototype.match ein Array zurückgeben. Du vergleichst es mit einem String, was folglich fehlschlägt. Die Ausgabe eines Arrays ist standardweise dasselbe wie array.join(',') und da du nur einen Wert hast, wird nur der ausgegeben und ist folglich mit einem normalen String identisch.

Edit
Obiges stimmt.
String#match() gibt entweder ein Array oder null zurück.

Array#toString() ruft standardmäßig Array#join() parameterlos auf (=> Separator = ','). Siehe auch: http://es5.github.io/#x15.4.4.2

Übrigens kannst du deinen dritten Regex viel einfacher umschreiben:
Javascript:
var frstMeasuredValve = whatIsRten.match(/frstMeasuredValve=D(1|2|3|4)/g);
 
Zuletzt bearbeitet:
Korrekt, du musst deine IF-Bedingungen so umschreiben:
Javascript:
if(frstMeasuredValve[0] === 'frstMeasuredValve=D1' )

Du kannst deinen Code auch noch sauberer umschreiben:
Javascript:
var measuredValve = /frstMeasuredValve=D(1|2|3|4)/g.exec("frstMeasuredValve=D1");
if (measuredValve) {
  // besserer Variablenname als number...
  var number = measuredValve[1];
  switch(number) {
    case 1:
      saveStartZposD01Firstime = true;
      break;
    ...
}
 
Verstehe ich nicht ganz. ich muss alle frstMeasuredValve=D1 (bis D4) abfragen, nur eine davon aber lediglich vorhanden sein, das ist aber variabel.
Nun denn, so klappt es aber auf jedenfall wunderbar:

Javascript:
var AllfrstMeasuredValve  = whatIsRten.match(/frstMeasuredValve=D1|D2|D3|D4/g) ;
if(AllfrstMeasuredValve[0] === 'D1' ) { saveStartZposD01Firstime = true; };
if(AllfrstMeasuredValve[0] === 'D2' ) { saveStartZposD02Firstime = true; };
if(AllfrstMeasuredValve[0] === 'D3' ) { saveStartZposD03Firstime = true; };
if(AllfrstMeasuredValve[0] === 'D4' ) { saveStartZposD04Firstime = true; };
alert(saveStartZposD01Firstime + " " + saveStartZposD02Firstime + " " + saveStartZposD03Firstime + " " + saveStartZposD04Firstime)

Danke nochmals :)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück