お題
- 以下のファイルの単語数を取得せよ
- wcコマンドを使い単語数が合っているかチェックすること
- wcコマンドのカウント方法に合わせる
sample.rb
sample sample sample sample sample
回答
file = 'sample.rb' file_words = File.read(file).split.size p file_words => 5
wcの-w
オプションを使い、単語数のみを表示してチェックする。
wc -w sample.rb => 5 sample.rb
どちらも単語数は5と表示された。おそらく合っていると思われる。
説明
まず読み込むファイルを取得する。
file = 'sample.rb'
次に、Fileクラスのreadメソッドを使ってファイルの中の文を取り出す。
File.read(file) => "sample\nsample\nsample\nsample\nsample"
これを、splitメソッドを使って配列に入れる。
File.read(file).split => ["sample", "sample", "sample", "sample", "sample"]
splitメソッドは、引数patternを区切り文字として文字列を分割し、配列を返します。 split (String) - Rubyリファレンス
これでそれぞれの単語が配列に入ったので、sizeメソッドで配列の総数を取得する。
File.read(file).split.size => 5
反省
このやり方が本質的な方法なのかはすこし自信がない。なぜならsplitメソッドといえば引数をつけるのが一般的だと思っているから。
ただ、単語数の多い他のファイルでもwcコマンドと同じ単語数が表示されたため、まぁ間違ってはいないのだろうと思っている。