目次(まとめ)

◾️ 改行コードは、chompメソッドで削除する

◾️ 場合によって、"chomp" と "chomp!" を使い分ける

こんにちは、みっちゃんです

Rubyを使ってテキストファイルを読み込むときに、文末にある改行コードを削除したい場合はどうしたらいいですか?

Rubyでは、chompメソッドを使って、改行コードを削除することができます。

今回の記事では、テキストファイルを読み込んで、改行コードを削除して出力する方法を紹介します。

改行コードは、chompメソッドで削除する

ここでは、以下のようなテキストファイル(input.txt)をRubyで読み込むプログラムを例にして解説します。

# input.txt
Hello, world !!

このテキストファイルを読み込むプログラムは、以下のような例(sample.rb)になります。

# sample.rb

infile = open("input.txt", "r")

while line = infile.gets
   p line
end

このプログラムをターミナル上などで実行すると、以下のように出力されます。

$ ruby sample.rb
"Hello, world !!\n"

このように、テキストファイルでは見えないですが、改行コードである "\n" が文末に表示されているのがわかります。

これを削除するためには、"chomp" メソッドを使って、以下のようにプログラミングします。

# sample-2.rb

infile = open("input.txt", "r")

while line = infile.gets
   p line.chomp
end

これを実行すると、以下のように、改行コードが削除されて表示されます。

$ ruby sample.rb
"Hello, world !!"

場合によって、"chomp" と "chomp!" を使い分ける

Rubyのメソッドには、「破壊的メソッド」と「非破壊的メソッド」という2種類があり、"chomp" メソッドの場合にも2種類があります。

破壊的メソッド:chomp!
非破壊的メソッド:chomp

破壊的メソッドを使うと、その変数そのものが変更されることになります。

例えば上の例では、以下のように "line.chomp!" とすると、それ以降で "line" という変数内に改行コードが消えることになります。

# sample-3.rb

infile = open("input.txt", "r")

while line = infile.gets
   p line.chomp!   #=> "Hello, world !!"
   p line          #=> "Hello, world !!"
end

一方で、非破壊的メソッドを使うと、その変数そのものは変更されません。

つまり、以下のように "line.chomp" としても、それ以降で "line" という変数には改行コードが残った状態になります。

# sample-4.rb

infile = open("input.txt", "r")

while line = infile.gets
   p line.chomp   #=> "Hello, world !!"
   p line         #=> "Hello, world !!\n"
end