- ベストアンサー
wait を使うのでしょうか?
いつもお世話になります。自分の書いた長めのファイルから、あるキーワードを含む行を抜き出して表示するプログラムを作ったの(それもここで質問に答えてもらってはじめてできたん_)ですが、一致する行が多いときには、ザクザクと画面上を流れて(print;を使っています)前半部がよく見れません。>filenameでファイルに保存はできるので、後で開けばみれるのですが、できれば10行くらい表示したらストップして、何かキーボードのキーを押したら、また続きを表示するようにしたいのです。BASICでは、STOPだかWAITだかで実現できてたように思うのですが。。。適当な制御命令がありますか。頭をお借りしてよろしいでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
案a)STDOUTを"|more"でオープンし直して出力。 案b)$whatを@ARGVから読み取り、コマンドラインで指定できるようにする。 ――とか。具体的なコードは省略。
その他の回答 (2)
- umasikajiro
- ベストアンサー率67% (545/803)
10行づつなら、取り合えずwhile以下を while (<IN>) { if(/$what/) {print; $count++; if($count>=10) {$count=0; <>; } } } close IN; # <> は <STDIN>の略形です ( http://ryulife.com/attic/perl.html の第五章 )
お礼
思ってたとおりに動きます!ありがとうございます。ただ、なんでうまくいってるのか、まだよくわからないです。でも、そっちはゆっくり考えようと思います。初心者の質問にいいアドバイスをありがとうございます。しっかし、なんでやろ~。
- osamuy
- ベストアンサー率42% (1231/2878)
コマンドラインから実行してるのであれば、 perl a.pl | more みたいに、ページャにリダイレクトするのが一番手っ取り早いかと。
補足
こんなプログラムです(段組みがひどいですが) print "what?"; $what = <STDIN>; chomp($what); open (IN, "file_a"); while (<IN>){ if($_=~/$what/){ print $_; }} close IN; 入力を待つためか、うまく |more が使えませんでした。
お礼
昨晩からお答えを見ていたのですが、うまく利用しきれずにお礼が遅くなりました。教えていただいた二つの案ともうまくいきました、ありがとうございます。案a)の方は実はうまくSTDOUTを使えず、プログラム中で一旦名前をつけて、それをsystem("moreで開いています。案b)はしっかり理解できたつもりです。最初のお答えですでに十分なヒントをもらってたんですね。初心者の質問にいいアドバイスをありがとうございました。