目次(まとめ)
◾️ gsubメソッドを使って、任意の文字列を置き換える
◾️ 関連記事
こんにちは、みっちゃんです。
Rubyを使ってプログラミングしているんだけど、与えられた文字列の中で置き換えたい文字があります。どうやったら文字の置換をすることができますか?
文字列の置換は、"gsub" メソッドを使用することで可能です。
今回の記事では、テキストファイルを読み込んで、文字列を置き換える方法を紹介します。
gsubメソッドを使って、任意の文字列を置き換える
ここでは、以下のようなテキストファイル(input.txt)をRubyで読み込むことを考えます。
Government of the people, by the people, for the people.
これを読み込んで標準出力するRubyのスクリプトは、以下のような例(sample-1.rb)になります。
# sample-1.rb infile = open("input.txt", "r") # テキストファイル "input.txt" を、読み込み (read) モードで開いています while line = infile.gets # 読み込みモードで開いたファイルを、1行ずつ読み込んでいく繰り返し文です puts line end # 繰り返しはここまで infile.close # 開いていたファイルを閉じる
これをターミナル上などで実行すると、以下のように出力されます(初心者の方で実行方法がわからない方は、こちらの記事をご参照ください)。
$ ruby sample-1.rb
Government of the people, by the people, for the people.
ちなみに、"Government of the people, by the people, for the people." とは、アメリカ合衆国の大統領として有名なエイブラハム・リンカーンが残した言葉です。
意味としては、"人民の、人民による、人民のための政治" となります。
ここでは、"people" という文字列を "ant(アリ)" に置き換えて、"アリの、アリによる、アリのための政治" にしてみます。
Rubyでは、"gsub" メソッドを使うことで文字列置換が可能です。
# sample-2.rb infile = open("input.txt", "r") while line = infile.gets line.gsub!("people", "ant") puts line end infile.close
以前の記事でも紹介したように、Rubyには、"破壊的メソッド" と "非破壊的メソッド" の2種類が準備されていますが、上のスクリプトでは、破壊的メソッド "gsub!" を使っています。
いま "line" という変数には、ファイルから読み込んだ文字列が入っているのですが、その変数に対して "gsub!" メソッドを適用して「"people" を "ant" に置き換える」処理をしています。
実行すると、以下のようになります。
$ ruby sample-2.rb
Government of the ant, by the ant, for the ant.
非破壊的メソッドである "gsub" を使いたければ、以下のように実行することも可能です。
# sample-3.rb infile = open("input.txt", "r") while line = infile.gets replaced_line = line.gsub("people", "ant") puts replaced_line end infile.close