2006/02/24(金)Rubyでコンソールから1文字入力
2006/02/24 22:00
・解決案1(不採用) 添付ライブラリcursesを使う。Winでもunixでも動くには動きそうだが、表示とかが機種依存ぽいので止め。
・解決案2(採用) Win32API+crtdll.dllを使う。もちろんwin32限定だが、その範囲に限れば最も機種依存度低そう。(msvcrt.dllよりもcrtdll.dllの方が汎用性高いという認識で合ってるよね?)
ということで解決案2でGO。
こんなふうに書いてみた。
require 'Win32API' func_getch = Win32API.new('crtdll.dll', '_getch', 'v', 'i') str = "Do you like skate? [y/N]\n" print str while true do x = func_getch.call.chr.downcase case x when 'y' #yesの時の処理 print "Ok!\n" break when 'n', "\r" #noの時の処理(デフォルト) print "Terrible!\n" break when "\C-c" #getchでコンソールを奪うと中断出来ないので exit else print str end end如何にも古い人のコードだが気にしないで欲しい。
Win32API->crtdll.dll経由で_getchを呼び出す。_getchはエコーしないのであとは入力された文字で処理を分けてやるだけ。
意外と簡単に書けたけど…… こんなの使うのかな?
[参考URL]
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/6991