ব্যবহারকারীর কোনও কী চাপ না দেওয়া পর্যন্ত আমি আমার আর স্ক্রিপ্টটি থামাতে চাই p
আমি এটা কিভাবে করবো?
ব্যবহারকারীর কোনও কী চাপ না দেওয়া পর্যন্ত আমি আমার আর স্ক্রিপ্টটি থামাতে চাই p
আমি এটা কিভাবে করবো?
উত্তর:
যেমন কেউ ইতিমধ্যে একটি মন্তব্যে লিখেছেন, আপনাকে আগে বিড়ালটি ব্যবহার করতে হবে না readline()
। সহজভাবে লিখুন:
readline(prompt="Press [enter] to continue")
যদি আপনি এটিকে কোনও ভেরিয়েবলের কাছে বরাদ্দ করতে না চান এবং কনসোলে মুদ্রিত রিটার্ন চান না, তবে এতে readline()
একটি মোড়ানো invisible()
:
invisible(readline(prompt="Press [enter] to continue"))
press esc keep to exit loop
?
পদ্ধতি 1
আপনি কনসোলে [প্রবেশ করুন] চাপ না দেওয়া পর্যন্ত অপেক্ষা করুন:
cat ("Press [enter] to continue")
line <- readline()
একটি কার্য মধ্যে মোড়ানো:
readkey <- function()
{
cat ("Press [enter] to continue")
line <- readline()
}
এই ফাংশনটি Console.ReadKey()
সি # এর সেরা সমতুল্য ।
পদ্ধতি 2
আপনি কীবোর্ডে [enter] কীস্ট্রোক টাইপ না করা পর্যন্ত বিরতি দিন। এই পদ্ধতির অসুবিধা হ'ল আপনি যদি এমন কিছু টাইপ করেন যা একটি নম্বর নয় তবে এটি একটি ত্রুটি প্রদর্শন করবে।
print ("Press [enter] to continue")
number <- scan(n=1)
একটি কার্য মধ্যে মোড়ানো:
readkey <- function()
{
cat("[press [enter] to continue]")
number <- scan(n=1)
}
পদ্ধতি 3
কল্পনা করুন যে কোনও গ্রাফে অন্য বিন্দুর চক্রান্ত করার আগে আপনি কীপ্রেসের জন্য অপেক্ষা করতে চান। এই ক্ষেত্রে, আমরা কোনও গ্রাফের মধ্যে কী-পিসের জন্য অপেক্ষা করতে getGraphicsEvent () ব্যবহার করতে পারি।
এই নমুনা প্রোগ্রামটি ধারণাটি চিত্রিত করে:
readkeygraph <- function(prompt)
{
getGraphicsEvent(prompt = prompt,
onMouseDown = NULL, onMouseMove = NULL,
onMouseUp = NULL, onKeybd = onKeybd,
consolePrompt = "[click on graph then follow top prompt to continue]")
Sys.sleep(0.01)
return(keyPressed)
}
onKeybd <- function(key)
{
keyPressed <<- key
}
xaxis=c(1:10) # Set up the x-axis.
yaxis=runif(10,min=0,max=1) # Set up the y-axis.
plot(xaxis,yaxis)
for (i in xaxis)
{
# On each keypress, color the points on the graph in red, one by one.
points(i,yaxis[i],col="red", pch=19)
keyPressed = readkeygraph("[press any key to continue]")
}
এখানে আপনি গ্রাফটি দেখতে পাবেন, এর পয়েন্টের অর্ধেক রঙিন, কীবোর্ডে পরবর্তী কীস্ট্রোকের জন্য অপেক্ষা করতে হবে।
সামঞ্জস্যতা: পরিবেশের অধীনে পরীক্ষিত উইন.গ্রাফ বা এক্স 11 ব্যবহার করে । বিপ্লব আর ভি 6.1 এর সাথে উইন্ডোজ 7 x64 এর সাথে কাজ করে। আর স্টুডিও-র অধীনে কাজ করে না (কারণ এটি উইন.গ্রাফ ব্যবহার করে না)।
prompt
যুক্তিটি ব্যবহার করে 1 পদ্ধতিটি ছোট করা যেতে পারে readline
। what=""
কলটিতে যোগ করা থাকলে পদ্ধতি 2 কোনও ইনপুট (কেবল সংখ্যা নয়) নিয়ে কাজ করবে scan
। getGraphicsEvent
কেবলমাত্র নির্দিষ্ট প্ল্যাটফর্মের নির্দিষ্ট গ্রাফিক্স ডিভাইসগুলিতে কাজ করে (তবে আপনি যদি এই ডিভাইসগুলির মধ্যে একটি ব্যবহার করেন তবে এটি দুর্দান্ত কাজ করে)।
if(line == "Q") stop()
এখানে একটি সামান্য ফাংশন (tcltk প্যাকেজ ব্যবহার করে) একটি ছোট উইন্ডো খুলবে এবং আপনি চালিয়ে যান বোতামটি ক্লিক না করা বা কোনও কী (যতক্ষণ না ছোট উইন্ডোটিতে এখনও ফোকাস রয়েছে) টিপুন ততক্ষণ অপেক্ষা করা হবে, তবে এটি আপনার স্ক্রিপ্টটি চালিয়ে যেতে দেবে।
library(tcltk)
mywait <- function() {
tt <- tktoplevel()
tkpack( tkbutton(tt, text='Continue', command=function()tkdestroy(tt)),
side='bottom')
tkbind(tt,'<Key>', function()tkdestroy(tt) )
tkwait.window(tt)
}
শুধু করা mywait()
আপনার স্ক্রিপ্টের জন্য যে কোন জায়গায় যে স্ক্রিপ্টটি বিরাম করতে চাই।
এটি যে কোনও প্ল্যাটফর্মে কাজ করে যা tcltk সমর্থন করে (যা আমি মনে করি সমস্ত সাধারণ), কোনও কী প্রেসে প্রতিক্রিয়া জানাবে (কেবল সন্নিবিষ্ট নয়), এবং এমনকি স্ক্রিপ্টটি ব্যাচ মোডে চালিত হওয়ার পরেও কাজ করে (তবে এটি এখনও ব্যাচ মোডে বিরতি দেয়) , সুতরাং আপনি যদি এটি চালিয়ে না যান তবে এটি চিরকাল অপেক্ষা করবে)। ক্লিক না করা থাকলে বা কোনও চাবিকাঠি চাপানো না থাকলে এটি নির্ধারিত সময়ের পরে চালিয়ে যাওয়ার জন্য একটি টাইমার যুক্ত করা যেতে পারে।
কোন কী টিপানো হয়েছিল তা ফিরে আসে না (তবে এটি করার জন্য পরিবর্তন করা যেতে পারে)।
Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : [tcl] invalid command name "toplevel".
)
আর রুপ্রিপ্ট উভয়ই পঠন পাঠাতে প্রেরণ ''
করে এবং অ-ইন্টারেক্টিভ মোডে স্ক্যান করে (দেখুন ? readline
)। সমাধানটি হল stdin
স্ক্যান ব্যবহার করে জোর করা।
cat('Solution to everything? > ')
b <- scan("stdin", character(), n=1)
উদাহরণ:
$ Rscript t.R
Solution to everything? > 42
Read 1 item
এই উত্তরটি সাইমন এর অনুরূপ , তবে একটি নতুন লাইন ছাড়া অন্য অতিরিক্ত ইনপুট প্রয়োজন হয় না।
cat("Press Enter to continue...")
invisible(scan("stdin", character(), nlines = 1, quiet = TRUE))
nlines=1
পরিবর্তে ব্যবহার করে n=1
, ব্যবহারকারী রুপ্রিপ্টটি চালিয়ে যাওয়ার জন্য কেবল এন্টার টিপতে পারেন।
Rscript
: এটি বিরতি দেয় এবং কেবল Enter
চালিয়ে যাওয়ার জন্য আঘাত করা প্রয়োজন ।
এটি করার একটি উপায় (কিন্ডা, আপনাকে কীয়ের পরিবর্তে একটি বোতাম টিপতে হবে তবে যথেষ্ট কাছাকাছি) চকচকে ব্যবহার করতে হবে:
library(shiny)
ui <- fluidPage(actionButton("button", "Press the button"))
server <- function(input, output) {observeEvent(input$button, {stopApp()})}
runApp(shinyApp(ui = ui, server = server))
print("He waited for you to press the button in order to print this")
আমার অভিজ্ঞতার সাথে এটির একটি অনন্য বৈশিষ্ট্য রয়েছে: এমনকি যদি আপনি কোনও স্ক্রিপ্ট চালান যা runApp
ফাংশনটির পরে কোড লেখা থাকে, তবে অ্যাপটিতে বোতাম টিপানো না হওয়া পর্যন্ত এটি চলবে না (অ্যাপ্লিকেশনটি ভিতরে অ্যাপ্লিকেশনটি থামিয়ে দেয় বাটন stopApp
)।