kkobayashi #4190(2007/11/18 05:03 GMT) [ R ] Rating0/0=0.00
お題の意図としては標準入力が必須ではないようですので、キーボードイベントをフックしました。 イベントハンドラーの親環境がGlobalEnvになってしまってInputChekerの変数を触れないため、 強制的にハンドラーの親環境をInputChekerにセットしています。 (Rの作法に反するか分かりませんが、そもそもRでこういうコードを書くことはないでしょう・・・) > replicate(3, InputCheker(5, "ABCDEF")) input(ABCDEF) => input(ABCDEF) => input(ABCDEF) => [1] "OK" "NG" "TIME OUT"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
keybd <- function(key){ if(!as.logical(start)) start <<- Sys.time() if(key == "ctrl-J") return(end <<- Sys.time()) # Enter is handled as Ctrl-J str <<- c(str, key) return(NULL) # loop until a non-NULL value is returned } InputCheker <- function(n, s){ start <- 0 end <- 0 str <- character(0) env.old=environment(keybd) environment(keybd) <- new.env(parent=environment()) getGraphicsEvent(paste("input(", s, ") =>", sep=""), onKeybd=keybd) dev.off() environment(keybd) <- env.old if(end - start > n) return("TIME OUT") return(ifelse((paste(str, collapse="") == s), "OK", "NG")) } replicate(3, InputCheker(5, "ABCDEF"))
Rating0/0=0.00-0+
[ reply ]
kkobayashi
#4190()
[
R
]
Rating0/0=0.00
keybd <- function(key){ if(!as.logical(start)) start <<- Sys.time() if(key == "ctrl-J") return(end <<- Sys.time()) # Enter is handled as Ctrl-J str <<- c(str, key) return(NULL) # loop until a non-NULL value is returned } InputCheker <- function(n, s){ start <- 0 end <- 0 str <- character(0) env.old=environment(keybd) environment(keybd) <- new.env(parent=environment()) getGraphicsEvent(paste("input(", s, ") =>", sep=""), onKeybd=keybd) dev.off() environment(keybd) <- env.old if(end - start > n) return("TIME OUT") return(ifelse((paste(str, collapse="") == s), "OK", "NG")) } replicate(3, InputCheker(5, "ABCDEF"))Rating0/0=0.00-0+
[ reply ]