ACE-Editor Suchprobleme

gianfranco0104

Erfahrenes Mitglied
Hi, habe einen ACE-Editor Elemente, die ich ständig abgreifen möchte. Soweit klappt das auch ganz gut:
im HTML:
HTML:
       <pre id="editor"
          onMouseDown="if (window.event.button === 0) {
              auslesen_MW3();
              auslesen_MW10();
          }"
          onKeyUp="
              auslesen_MW3();
              auslesen_MW10();
          ">
        </pre>

und der "Finden" Script:

Javascript:
// Auslesen MW10 -Werte ---------
  function auslesen_MW10(){
      editor.find('needle',{
          backwards: true,
          wrap: false,
          caseSensitive: false,
          wholeWord: true,
          regExp: false
      })
      editor.$search.set({
          needle: /MW10=[0-9].[0-9]\b|MW10=[0-9]\b|MW10=[1-2][0-9]\b/ //|MW10=[1-9][0-9].[0-9][1-9]/
      });
      var found = editor.$search.find(editor.getSession());
      var Range = require('ace/range').Range,
      mine = new Range(found.start.row, found.start.column+1, found.end.row, found.end.column);
      pump_value01.value = editor.session.getTextRange(mine).replace(/M\b|MW10=\b|W10=\b|[^\\d]/, "");
      if (pump_value01.value === "") { pump_value01.value = 0 };
      ManPump01();   
  }
  // --------- ENDE Auslesen MW10-Werte ---------

  // Auslesen MW3 -Werte ---------
  function auslesen_MW3(){
      editor.find('needle',{
          backwards: true,
          wrap: false,
          caseSensitive: false,
          wholeWord: true,
          regExp: false
      })
      editor.$search.set({
          needle: /MW3=[0-9].[0-9]\b|MW3=[0-9]\b|MW3=[1-2][0-9]\b/
      });
      var found = editor.$search.find(editor.getSession());
      var Range = require('ace/range').Range,
      mine = new Range(found.start.row, found.start.column+1, found.end.row, found.end.column);
      mw3_VC01.value = "MW3 = " + editor.session.getTextRange(mine).replace(/M\b|MW3=\b|W3=\b|[^\\d]/, "");
      if (mw3_VC01.value === "") { mw3_VC01.value = "MW3 = " + 1 };
      //ManPump01();   
  }
  // --------- ENDE Auslesen MW10-Werte ---------

Das Problem ist, wenn eines der gesuchten Wörter vor her geschrieben ist wie es im <pre>-Tag aufgelistet ist:
"
auslesen_MW3(); (kommt zuerst)
auslesen_MW10(); (kommt danach)
"
also MW10=3
und MW3=2
wird MW10 nicht gefunden, da MW3 in meiner Auflistung zuerst kommt. woran kann das liegen?
es muss demnach also wirlich
MW3=2
und dann MW10=3 im Editor stehen, damit MW10 gefunden wird.

Noch ein Phänomen:
Ich habe im <pre>-Tag auch die Auflistungsreihenfolge umgedreht, dann ist es genau anders herum :(
Und wenn das erste Element in der der <pre>-Tag Auflistung garnicht im Editor vorkommt, dann werden nachfolgende Elemente auch nicht gefunden. sozusagen ist jedes Element, in der Reihenfolge, wie es im <pre>-Tag aufgelistet ist, abhängig vom vorherigen.
Habe es auch mit weiteren, also mehreren Elementen Probiert um das Fehlerbild zu probieren.

Ich hoffe ich habe das gut dargestellt. ist nicht so einfach.
 
Habe die Lösung selbst gefunden.
Wenn eines der Objekte nicht vorhanden ist, ist in der Funktion die Variable UNDEFINED und somit wird die Funktion unterbrochen. Das Suchen wird dann auch komplett unterbrochen.

Wenn man aber alle Elemente die nicht da sind, also im Falle eines Fehlers umgeht, wird dieser übersprungen und das nächste gesucht. so klappt es perfekt :)

also ungefähr so:
Javascript:
  function auslesen_MW10(){
      editor.find('needle',{
          backwards: true,
          wrap: false,
          caseSensitive: false,
          wholeWord: true,
          regExp: false
      })
      try {
          editor.$search.set({
              needle: /MW10=[0-9].[0-9]\b|MW10=[0-9]\b|MW10=[1-2][0-9]\b/ //|MW10=[1-9][0-9].[0-9][1-9]/
          });
          var found = editor.$search.find(editor.getSession());
          var Range = require('ace/range').Range,
          mine = new Range(found.start.row, found.start.column+1, found.end.row, found.end.column);
          pump_value01.value = editor.session.getTextRange(mine).replace(/M\b|MW10=\b|W10=\b|[^\\d]/, "");
          if (pump_value01.value === "") { pump_value01.value = 0.5 };
          ManPump01();
      } catch(err){  } // wenn MW Wert nicht vorhanden, dann übergehen
   
  }
 

Neue Beiträge

Zurück