[#6219] Ruby連載 第4話 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/04
[#6221] Re: Ruby連載 第4話 — Shin-ichiro HARA <sinara@...> 1998/02/04

原です。

[#6224] Re: Ruby連載 第4話 — Yasunari Momoi <conan@...> 1998/02/04

ももちゃん@あるもにこすです.

[#6225] Re: Ruby連載 第4話 — matz@... (Yukihiro Matsumoto) 1998/02/04

まつもと ゆきひろです

[#6249] Re: i++ — 助田 雅紀 <masaki.suketa@...>

助田です。

33 messages 1998/02/04
[#6252] Re: i++ — gotoken@... (GOTO Kentaro) 1998/02/05

ことけんです

[#6255] Re: i++ — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#6260] Re: i++ — Yuji Shigehiro <sigehiro@...> 1998/02/05

しげひろです.

[#6314] RE: ruby's design policy (Re: I'd like to subscr ibe this ML) — 助田 雅紀 <masaki.suketa@...>

オブジェクト指向周辺をぶらぶらしている助田です。

11 messages 1998/02/06

[#6333] ruby 流に添削して下さい — nkon@...2.3web.ne.jp

13 messages 1998/02/07
[#6335] Re: ruby 流に添削して下さい — OZAWA Sakuro <crouton@...> 1998/02/07

さくです.

[#6372] ruby 1.1b7 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

24 messages 1998/02/10
[#6402] parsedate (Re: ruby 1.1b7 released) — WATANABE Hirofumi <watanabe@...> 1998/02/13

わたなべです.

[#6405] Re: parsedate (Re: ruby 1.1b7 released) — Tadayoshi Funaba <tadf@...> 1998/02/13

ふなばです。

[#6407] Re: parsedate (Re: ruby 1.1b7 released) — matz@... (Yukihiro Matsumoto) 1998/02/13

まつもと ゆきひろです

[#6373] call for scripts — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

133 messages 1998/02/10
[#6414] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/14

金城です.

[#6428] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6448] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/16

金城です.

[#6452] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/17

まつもと ゆきひろです

[#6481] Re: call for scripts — Kikutani Makoto <kikutani@...> 1998/02/17

きくたに@ぷ〜たろ〜です。

[#6483] Re: call for scripts — OZAWA Sakuro <crouton@...> 1998/02/17

さくです.

[#6495] Re: call for scripts — WATANABE Hirofumi <watanabe@...> 1998/02/18

わたなべです.

[#6416] Re: call for scripts — shugo@... (Shugo Maeda) 1998/02/14

前田です。

[#6417] rgrep (Re: call for scripts) — shugo@... (Shugo Maeda) 1998/02/15

前田です。

[#6423] Re: rgrep (Re: call for scripts) — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6612] Re: call for scripts — Tadayoshi Funaba <tadf@...> 1998/02/21

ふなばです。

[#6582] File::Separator on cygwin — OZAWA Sakuro <ozawa@...>

小澤さくです。

19 messages 1998/02/20
[#6583] Re: File::Separator on cygwin — WATANABE Hirofumi <watanabe@...> 1998/02/20

わたなべです.

[#6586] Re: File::Separator on cygwin — OZAWA Sakuro <ozawa@...> 1998/02/20

小澤さくです。

[#6591] ruby 1.1b8 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/20
[#6620] rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/22

前田です。

[#6629] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

けいじゅ@日本ラショナルソフトウェアです.

[#6643] Re: rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/23

前田です。

[#6649] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

けいじゅ@日本ラショナルソフトウェアです.

[#6650] Re: rbc.rb and binding — matz@... (Yukihiro Matsumoto) 1998/02/23

まつもと ゆきひろです

[#6667] JRI 0.5 worked (was Re: rbc.rb and binding) — OZAWA Sakuro <crouton@...> 1998/02/23

さくです.

[#6687] Re: JRI 0.5 worked (was Re: rbc.rb and binding) — shugo@... (Shugo Maeda) 1998/02/24

前田です。

[#6712] JRI and JDBC — OZAWA Sakuro <ozawa@...> 1998/02/24

小澤さくです。

[#6635] hello — WATANABE Tetsuya <tetsu@...>

渡辺哲也と申します。

15 messages 1998/02/23

[#6706] Re: Counter class — toyofuku@...

豊福@パパイヤです。

12 messages 1998/02/24

[#6735] Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda)

前田です。

27 messages 1998/02/24
[#6746] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/25

けいじゅ@日本ラショナルソフトウェアです.

[#6747] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6752] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6754] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6756] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6786] Re: Mutex/ConditionVariable/Queue — senda@...

From: shugo@po.aianet.ne.jp (Shugo Maeda)

33 messages 1998/02/26
[#6791] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6794] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6796] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/26

けいじゅ@日本ラショナルソフトウェアです.

[ruby-list:6676] head.rb

From: WATANABE Tetsuya <tetsu@...>
Date: 1998-02-24 00:26:14 UTC
List: ruby-list #6676
すごい単純な例なのですが、$<.close の効果に気がつかなくて...

■ Ruby で head(1)

Ruby で UNIX の基本ツールの一つ head(1) を作ってみました。
ファイルを扱う際の基本パターンですので、小さいですが基本パ
ターン? になっているように思います。

■ ファイルを扱う基本パターン

ファイルを表示するだけの cat(1) との同等品は、Ruby ではつ
ぎのように書きます。

------------------------------
#! /usr/local/bin/ruby
# Created: February 21,1998 Saturday 18:41:43

while gets
  print
end

exit
------------------------------

gets は、便利な機能を持っています。gets は一行読み込んで
きます。引数がなければ「$<」(ARGV) でアクセスできる仮想的
なファイルから読み込みます。これは、コマンドライン上で指
定した一連の「ファイル」または、標準入力になります。Perl 
では

------------------------------
while (<>) {
  # 一行が $_ に入力される
}
------------------------------

でよく処理するものです。

■ $. と $<

ちょっと悩んだのが、$. の扱いです。Perl と同様に $. は、
「最後に読んだ入力ファイルの行番号」と定義されています。
head(1) の処理場合、必要行数を表示したら次のファイルの処
理を行います。このときの方法がよく分かりませんでした。マ
ニュアルやサンプルを参照してみたのですが...

Perl では、現在扱っているファイルを明示的に close するこ
とで、すべてがうまく行きます。$. をリセットします。きっと 
Ruby でも同様の方法があると思い確認した結果が次のソースコー
ドにある方法です。$<.close を実施することで、Perl とまっ
たく同じに現在の扱っているファイルがクローズされます。そ
して $. で示される行番号もリセットされます。

実はこれに気がつくまで $<.file.close とやっていて失敗して
いました。ちょっと気がつかなくて...

■ ソースコード

------------------------------
#! /usr/local/bin/ruby
# Created: February 22,1998 Sunday 09:30:21
# Author: tetsu(WATANABE Tetsuya)

def usage
  STDERR.print "usage: #$0 [-number] [files ...]\n"
  exit 1
end

lines = 10

while $_ = ARGV[0] and /^-/
  ARGV.shift
  if /^-(\d+)$/; lines = Integer($1); next end
  usage
end

while gets
  print '==> ', $<.filename, " <==\n" if $. == 1
  if $. > lines
    $<.close
  else
    print
  end
end

exit
------------------------------

次のソースコードは便利な方法を使わず、ほとんどを C のプロ
グラムと同じレベルで記述しているものです。どちらもやって
いることは同等なのですが...

------------------------------
#! /usr/local/bin/ruby
# Created: February 21,1998 Saturday 18:23:42
# Author: tetsu(WATANABE Tetsuya)

def usage
  STDERR.print "usage: #$0 [-number] [files ...]\n"
  exit 1
end

lines = 10

while $_ = ARGV[0] and /^-/
  ARGV.shift
  if /^-(\d+)$/; lines = Integer($1); next end
  usage
end

n = ARGV.length

if n == 0
  while gets
    print
    break if $. >= lines
  end
else
  while file = ARGV.shift
    print "==> #{file} <==\n" if n > 1
    f = File.open(file)
    while f.gets
      print
      break if $. >= lines
    end
    f.close
  end
end

exit
------------------------------

--
WATANABE Tetsuya HP Japan PSO
e-mail  tetsu@jpn.hp.com

In This Thread

Prev Next