Just do IT

思うは招く

Ruby基礎問題100本ノック#10 ファイルの単語数を取得する

お題

  • 以下のファイルの単語数を取得せよ
  • 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コマンドと同じ単語数が表示されたため、まぁ間違ってはいないのだろうと思っている。