[#954] Rational — keiju@... (Keiju ISHITSUKA)

けいじゅ@SHLジャパンです.

23 messages 1996/10/30
[#955] Re: Rational — matz@... (Yukihiro Matsumoto) 1996/10/30

まつもと ゆきひろです.

[#968] Re: Rational 1996/10/31

けいじゅ@SHLジャパンです.

[ruby-list:905] [REQ]Get Strings!<2> GETR

From: Shin-ichiro Hara <sinara@...>
Date: 1996-10-27 10:26:42 UTC
List: ruby-list #905
原です。つづきです。

(5)ungetc, ungets がほしい。

(6)getr(RS) がほしい。

何のことかというと、この RS というのは、レコード・セパレータでは
なくて、まあ、レコード・スタータというべきか、つまり、レコードを
その始まりの文字で区別したいのです。例えば、日経 MIX の各アーティ
クルは、"==========\n" で始まります。これは見た目からいって自然な
データの構造です。ところが "matz" という文字が出てくるアーティク
ルだけ抜き出すにはこの様に書かなければならないわけです。

article = ""
while gets
  if ( $. > 1 && $_ == "==========\n" )
    print article if article =~ /matz/
    article = ""
  end
  article += $_
end
print article if article =~ /matz/

これは元のデータの自然さからいってあまりに醜い気がします。これをこ
う書きたいのです。

while getr("==========\n")
  print if /matz/
end

このコードをみたら、Larry Wall は畳をかきむしって悔しがるにちがい
ありません。:-)

あるいは、gets(RS,0), gets(RS,1), gets(RS,2) としてそれぞれ、RS
を、セパレータ、ターミネータ、スタータとしてもいいかもしれない。

しかし(5)とも関係しますが、ストリームの先読み、読み戻しをする
必要があるので、むずかしいかもしれませんね。

さらに RS に正規表現を使えれば言うことなしですが、もともと $/ に
も許してないですしね。

(つづく)
----------------------------------------------------------
                                                  原信一郎

In This Thread

Prev Next