Zeilenumbruch in Func Keyproc abfangen

  • Hallo Gemeinde,

    mit der Func Keyproc lese ich vom Kartenleser eine Ausweisnummer ein. Jetzt hat sich herausgestellt, dass es nicht nur 6-stellige Ausweisnummern gibt, sondern auch 5-stellige.
    Um sicherzustellen, das auch anders-stellige außer 6-stellige nummern ausgelesen werden können habe ich den Leser so konfiguriert, das er nach dem Einlesen der Ziffern einen Zeilenvorschub
    übergibt. Jetzt möchte ich den Zeilenvorschub mit StringRegExp abfangen. Aber das funktioniert nicht, da die Func so geschrieben ist, das er keine Zeichen außer die Zahlen 0-9 annimmt.
    Ich habe den CHR-Range auf 13 erweitert, sodass CR und LF ebenfalls "erlaubt sind" aber das funktioniert nicht. Könnte mir jemand sagen was ich übersehen habe? Könnte es sein das ich die Variable
    $sPattern nicht richtig deklariert habe?


  • Ich habe den CHR-Range auf 13 erweitert, sodass CR und LF ebenfalls "erlaubt sind" aber das funktioniert nicht. Könnte mir jemand sagen was ich übersehen habe?

    Du hast einen Tastatur-Hook. CR und LF sind aber keine Zeichen, die über die Tastatur ausgegeben werden. Lass doch ein ENTER zum Abschluss senden. Ebenso würde ich eine Abbruchsequenz mittels ESC ermöglichen.

    btw: vkCode = 13 ist ENTER!

  • Hallo Bugfix,
    vielen lieben Dank für deinen Denkanstoß. Der Leser erzeugt als "Return-Wert" Keyboard Enter. Sollte also passen.
    Nur wie lasse ich das Keyboard-Enter in Zeile 9 zu? $sChr, '[0-9]' & @CRLF geht auch nicht... habe als $sPattern auch "\r\n" erfolglos versucht ;(

    Der User kann den Vorgang ja im Hauptprogramm abbrechen, sodass ich in der Keyproc darauf verzichten würde, damit da nichts den Hook stört oder blockiert...

  • Nur wie lasse ich das Keyboard-Enter in Zeile 9 zu? $sChr, '[0-9]' & @CRLF geht auch nicht... habe als $sPattern auch "\r\n" erfolglos versucht

    Du verwandelst ja mittels Chr(vkCode) den gelesenen Wert wieder in sein Zeichen. Das "Zeichen" von 13 ist ENTER - kein stringlesbares Zeichen und somit nicht per Pattern auszufiltern.

    Besser ist also erst den vkCode zu filtern und dann wahlweise zu Speichern (Zeichen) oder zu Beenden (Enter).


    Probier mal das (ungetestet):

  • Hallo Bugfix,

    ich habe jetzt den vkCode versucht zu filtern aber er geht mir trotzdem in die Else und wertet somit ENTER nicht aus. ich verzweifle ;(

    $sPattern auf die 13 gesetzt. Chr-Range auf 13 erhöht damit zugelassenes Zeichen. Trotzdem führt er die If -Abfrage in Zeile 12 nicht aus
    sondern geht immer in die Else. Kannst du mir bitte sagen wie ich das ENTER richtig filtere?

  • Ganz blöde Frage: Du kannst bei Scannerknofigurationen ja auch selbst definierte Zeichen anhängen (z.B. ein @ ).

    Wäre das nicht für dich abfangbar, da dies ein normales String-Zeichen ist?

  • Hallo Bugfix,

    es tut mir leid. Als ich deine Antwort erstmalig las, war der Code-Block nicht zu sehen. Vielleicht habe ich zu früh die Antwort gelesen.
    Also ich teste das jetzt zunächst denn leider kann ich den Scanner nicht dazu bewegen ein alternatives Zeichen zu senden als Suffix...

  • deine If in der Zeile 21 wird mit [error: MapExists(): undefined function] quittiert.

    OK, du hast eine ältere AutoIt Version - ohne Maps. Also entweder AutoIt aktualisieren (empfohlen) oder statt Map die Keycodetabelle als Dictionary verwenden, wäre genauso komfortabel. 2D-Array geht natürlich auch, überlasse ich mal deinem Geschmack.

  • hipfzwirgel: Dann gehe ich davon aus das die Daten vom NFC-Chip gelesen werden und vorher von dir darauf programmiert werden. Richtig? Dann gebe den programmierten Daten das @ (oder was auch immer) direkt als letztes Zeichen mit (ich weiß QuD aber simpel)!?

    Oder du versuchst es mit BugFix's Methode ;)

  • BugFix : also ich denke jetzt komme ich an einem Update nicht mehr herum... ;)

    @ Moombas: Ja, die Daten werden zwar von einem NFC-Chip gelesen aber dieser ist in den MA-Ausweisen implementiert und die kann ich nicht beschreiben...
    und Auskunft vom zuständigen Team für die Leser bei uns: Suffix ist nicht... ;(

  • @ Alle:

    So. Nach dem Update und Anpassung der Includes(es hat #include <WinAPIConstants.au3> gefehlt)
    funzt die Funktion Keyproc jetzt einwandfrei!!!!

    Egal wie viele Zahlen eingelesen werden: Wenn das Enter kommt ist Schluss und die eingelesene Ziffernfolge wird ausgegeben. :party:

    @ Bugfix: :klatschen::klatschen::klatschen::klatschen::klatschen:

    Moombas: Auch dir vielen lieben Dank für deine Unterstützung :thumbup::thumbup::thumbup::thumbup::thumbup::thumbup:

    Case gelöst!