[Ruby] Erkennen Sie ASCII-Steuerzeichen wie ^ H wie vorgesehen, wenn Sie Standardeingaben akzeptieren

Fazit

** Verwenden Sie "Readline.readline" anstelle von "STDIN.gets" **

STDIN.gets Wenn Sie sich ansehen, wie Sie Standardeingaben in Ruby empfangen, finden Sie häufig die folgenden Implementierungen:

stdin.rb


print '> '
text = STDIN.gets.strip
puts "You said #{text}!"
$ ruby stdin.rb
> hello
You said hello!

Es scheint, dass es zusätzlich zu "bekommen" "read", "readline" und "readlines" gibt. Ich möchte mehrere Zeilen aus der Ruby-Standardeingabe lesen

Nachteil

Mit der obigen Methode können ASCII-Steuerzeichen jedoch nicht mit dem beabsichtigten Verhalten erkannt werden.

$ ruby stdin.rb
> hello^H^H^H
You said he!lo

Im obigen Beispiel wird nach Eingabe von "Hallo" dreimal die Rücktaste des ASCII-Steuerzeichens (die mit "Strg" + "H" eingegeben werden kann) eingegeben.

Eigentlich habe ich nach der Eingabe von "Hallo" dreimal das Steuerzeichen der Rücktaste eingegeben, also möchte ich, dass es "er" ist, aber es wird zu "Hallo ^ H ^ H ^ H" und akzeptiert Standardeingaben. Die Rücktaste wird angewendet, nachdem Sie fertig sind.

Lösungen

Um dies wie beabsichtigt zu tun, implementieren Sie es wie folgt:

readline.rb


require 'readline'

print '> '
text = Readline.readline
puts "You said #{text}!"
$ ruby readline.rb
> he # "hello"Nach Eingabe von Strg+H dreimal gedrückt
You said he!

Andere

Readline.readline ist nützlich, da Sie einen anderen Verlauf verwenden können. Sie können die zuvor eingegebene Zeichenfolge anzeigen, indem Sie die Aufwärts-Taste des Cursors drücken oder "Strg" + "P" drücken. Weitere Informationen finden Sie im Modul Readline-Referenzhandbuch.

Siehe Wikipedia für ASCII-Steuerzeichen.

Recommended Posts

[Ruby] Erkennen Sie ASCII-Steuerzeichen wie ^ H wie vorgesehen, wenn Sie Standardeingaben akzeptieren
Ruby-Standardeingabe