電子書籍の厳選無料作品が豊富!

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

A 回答 (3件)

案a)STDOUTを"|more"でオープンし直して出力。


案b)$whatを@ARGVから読み取り、コマンドラインで指定できるようにする。
――とか。具体的なコードは省略。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/06 17:23

10行づつなら、取り合えずwhile以下を



while (<IN>)
{
if(/$what/)
{print;
$count++;
if($count>=10)
{$count=0;
<>;
}
}
}
close IN;
# <> は <STDIN>の略形です ( http://ryulife.com/attic/perl.html の第五章 )
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/06 17:28

コマンドラインから実行してるのであれば、


perl a.pl | more
みたいに、ページャにリダイレクトするのが一番手っ取り早いかと。

参考URL:http://journal.mycom.co.jp/special/msdos/028.html

この回答への補足

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

補足日時:2007/01/05 21:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!