• ベストアンサー

wait を使うのでしょうか?

いつもお世話になります。自分の書いた長めのファイルから、あるキーワードを含む行を抜き出して表示するプログラムを作ったの(それもここで質問に答えてもらってはじめてできたん_)ですが、一致する行が多いときには、ザクザクと画面上を流れて(print;を使っています)前半部がよく見れません。>filenameでファイルに保存はできるので、後で開けばみれるのですが、できれば10行くらい表示したらストップして、何かキーボードのキーを押したら、また続きを表示するようにしたいのです。BASICでは、STOPだかWAITだかで実現できてたように思うのですが。。。適当な制御命令がありますか。頭をお借りしてよろしいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

案a)STDOUTを"|more"でオープンし直して出力。 案b)$whatを@ARGVから読み取り、コマンドラインで指定できるようにする。 ――とか。具体的なコードは省略。

ma_san
質問者

お礼

昨晩からお答えを見ていたのですが、うまく利用しきれずにお礼が遅くなりました。教えていただいた二つの案ともうまくいきました、ありがとうございます。案a)の方は実はうまくSTDOUTを使えず、プログラム中で一旦名前をつけて、それをsystem("moreで開いています。案b)はしっかり理解できたつもりです。最初のお答えですでに十分なヒントをもらってたんですね。初心者の質問にいいアドバイスをありがとうございました。

その他の回答 (2)

回答No.3

10行づつなら、取り合えずwhile以下を while (<IN>) { if(/$what/) {print; $count++; if($count>=10) {$count=0; <>; } } } close IN; # <> は <STDIN>の略形です ( http://ryulife.com/attic/perl.html の第五章 )

ma_san
質問者

お礼

思ってたとおりに動きます!ありがとうございます。ただ、なんでうまくいってるのか、まだよくわからないです。でも、そっちはゆっくり考えようと思います。初心者の質問にいいアドバイスをありがとうございます。しっかし、なんでやろ~。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

コマンドラインから実行してるのであれば、 perl a.pl | more みたいに、ページャにリダイレクトするのが一番手っ取り早いかと。

参考URL:
http://journal.mycom.co.jp/special/msdos/028.html
ma_san
質問者

補足

こんなプログラムです(段組みがひどいですが) print "what?"; $what = <STDIN>; chomp($what); open (IN, "file_a"); while (<IN>){ if($_=~/$what/){ print $_; }} close IN; 入力を待つためか、うまく |more が使えませんでした。

関連するQ&A